Android - Double值在小数点后始终返回00

时间:2016-03-28 14:59:37

标签: java android string double package-managers

我有一种获取任何应用程序大小的方法。但问题是我总是在小数点后得到.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()。它不会导致错误。因为我在其他地方使用它。它工作正常。所以,现在我不知道我的问题出现在哪里......

3 个答案:

答案 0 :(得分:0)

您的问题是cApp.length()正在返回long,然后您将其除以另一个整数,因此您不会以这种方式获得任何小数位数。尝试用另一个双重划分。如下所示:

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

只需在除数中添加小数也应该有效: appSizeInMegaBytes = cApp.length() / 1048576.0;

答案 1 :(得分:0)

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

            formattedText = ""+appSizeInMegaBytes;

这就是你如何看待价值是否合适的方式。

答案 2 :(得分:0)

您将这些行中的格式化文本丢弃:

has_attached_file :file, :styles => lambda { |a| a.instance.is_image? ? {:thumbnail => "320x240!"} : {} }

Format.format()调用将返回一个字符串,所以不要抛弃它。试试这个:

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