我有一个方法可以得到任何应用程序的大小。但问题是,,我总是在十进制之后得到.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()。它不会造成任何错误。因为我在其他地方使用它。效果很好。所以,现在我不知道我的问题出在哪里..。
发布于 2016-03-28 15:09:46
您的问题是,cApp.length()返回一个long,然后将其除以另一个整数,这样就不会得到任何十进制位。试着用另一双除以代替。所以,就像:
double megaByte = 1048576;
appSizeInMegaBytes = cApp.length() / megaByte;仅向除数项中添加一个小数点也可以:appSizeInMegaBytes = cApp.length() / 1048576.0;
发布于 2016-03-28 15:13:50
我总是依赖于字符串的好的旧的隐式转换:
formattedText = ""+appSizeInMegaBytes;这就是你将看到的价值是否好。
发布于 2016-03-28 15:39:37
您将在以下几行中抛出格式化的文本:
cDFormat.format(appSizeInMegaBytes);
formattedText = Double.toString(appSizeInMegaBytes);Format.format()调用将返回一个字符串,所以不要抛出它。试一试:
formattedText = cDFormat.format(appSizeInMegaBytes);https://stackoverflow.com/questions/36264948
复制相似问题