android-double值总是在小数点后返回00

of1yzvn4  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(378)

我有一个方法来获得任何应用程序的大小。但问题是我总是在小数点后得到.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()。它不会引起错误。因为我在别的地方用。很好用。所以,现在我不知道我的问题出在哪里。。。

h9a6wy2h

h9a6wy2h1#

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

double megaByte = 1048576;
appSizeInMegaBytes = cApp.length() / megaByte;

只需在除数上加一个小数点也可以: appSizeInMegaBytes = cApp.length() / 1048576.0;

qlzsbp2j

qlzsbp2j2#

我总是依赖于古老的字符串隐式转换:

formattedText = ""+appSizeInMegaBytes;

这就是你将看到的价值是好的。

9wbgstp7

9wbgstp73#

您在这些行中抛出格式化文本:

cDFormat.format(appSizeInMegaBytes);
formattedText = Double.toString(appSizeInMegaBytes);

format.format()调用将返回一个字符串,所以不要抛出它。请尝试以下操作:

formattedText = cDFormat.format(appSizeInMegaBytes);

相关问题