Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-双精度值始终在小数点后返回00_Java_Android_String_Double_Package Managers - Fatal编程技术网

Java Android-双精度值始终在小数点后返回00

Java Android-双精度值始终在小数点后返回00,java,android,string,double,package-managers,Java,Android,String,Double,Package Managers,我有一个方法来获取任何应用程序的大小。但问题是我总是在小数点后得到.00值。 假设一个应用程序的大小是3.44 因此,如果我调用我的方法,那么它将返回值3.00 而且,每个应用程序都是一样的。如果任何应用程序的大小小于1MB,那么我得到0.00。请帮帮我。这是我的方法 private String getAppsSize() { File cApp; DecimalFormat cDFormat = new DecimalFormat("#.##");

我有一个方法来获取任何应用程序的大小。但问题是我总是在小数点后得到.00值。

假设一个应用程序的大小是3.44

因此,如果我调用我的方法,那么它将返回值3.00 而且,每个应用程序都是一样的。如果任何应用程序的大小小于1MB,那么我得到0.00。请帮帮我。这是我的方法

    private String getAppsSize() {
        File cApp;
        DecimalFormat cDFormat = new DecimalFormat("#.##");
        double appSizeInMegaBytes;
        String formattedText = null;
        try {
            cAInfo = cPManager.getApplicationInfo(getCurrentAppPackageName(), 0);
            cApp = new File(cAInfo.publicSourceDir);
            appSizeInMegaBytes = cApp.length() / 1048576;
            cDFormat.format(appSizeInMegaBytes);
            formattedText = Double.toString(appSizeInMegaBytes);
        }
 catch (PackageManager.NameNotFoundException e) {
            showToast("Failed to count app size!");
            e.printStackTrace();
        }
        return formattedText;
    }

在这里,我有一个方法getCurrentPackageName()。它不会导致错误。因为我在别的地方用它。它很好用。所以,现在我不知道我的问题出在哪里…

你的问题是
cApp.length()
返回一个
long
,然后你将它除以另一个整数,这样你就不会得到任何小数位。试着用另一个双精度除法。比如:

double megaByte = 1048576;
appSizeInMegaBytes = cApp.length() / megaByte;
只需在除数中添加一个小数也可以:
appSizeInMegaBytes=cApp.length()/1048576.0

我总是依赖于良好的旧字符串隐式转换:

            formattedText = ""+appSizeInMegaBytes;

这就是您将如何查看该值是否正确的方法。

您将在以下行中抛出格式化文本:

cDFormat.format(appSizeInMegaBytes);
formattedText = Double.toString(appSizeInMegaBytes);
Format.Format()调用将返回一个字符串,因此不要丢弃它。请尝试以下方法:

 formattedText = cDFormat.format(appSizeInMegaBytes);

好的,它起作用了。但是,我在小数点后得到了很多值。现在,如果我调用该方法,则得到3.0256983(示例)。但是,我只想要小数点后的最后两位数