Android - 双精度值总是 returns 小数点后 00
Android - Double value always returns 00 after decimal
我有一种方法可以获取任何应用程序的大小。但问题是 我总是在小数点后得到 .00 值。
假设一个应用程序的大小是 3.44
所以,如果我调用我的方法,那么它将 return 值为 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() 调用将 return 一个字符串,所以不要把它扔掉。试试这个:
formattedText = cDFormat.format(appSizeInMegaBytes);
我有一种方法可以获取任何应用程序的大小。但问题是 我总是在小数点后得到 .00 值。
假设一个应用程序的大小是 3.44
所以,如果我调用我的方法,那么它将 return 值为 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() 调用将 return 一个字符串,所以不要把它扔掉。试试这个:
formattedText = cDFormat.format(appSizeInMegaBytes);