Android-Double值总是在小数后返回00



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

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

因此,如果我调用我的方法,它将返回3.00的值而且,每个应用程序都是一样的。如果任何应用程序的大小小于1 mb,那么我得到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);

最新更新