我有一个类,它有一个双“sizeinMegs”变量,只要值很小,比如0.00025 megs,它就会存储0.0,就像调试表中看到的那样。
我怎样才能把它保存在十进制的荣耀中?
这是我的密码:
thePdf.setFileSizeInMegaBytes((theFile.length() / 1000000)); //that's a double
double size = theFile.length(); // this returns say 12345
size = size / 1000000; this returns 0.012345
double storedValue = thePdf.getFileSizeInMegaBytes(); // this shows 0.0 in the watch window
String value;
value = fmt(size); //this shows the right value in the string
lblTest.setText("Size: " + value + " MB");
....
public static String fmt(double d)
{
if(d == (int) d)
return String.format("%d",(int)d);
else
return String.format("%s",d);
}发布于 2014-09-10 01:19:29
您应该使用BigDecimal而不是double,这样您就不会失去精度。您能否在以下文件中显示代码:
thePdf.setFileSizeInMegaBytes()和
thePdf.getFileSizeInMegaBytes()发布于 2014-09-10 03:45:34
这里很难说,因为我看不到"theFile“的声明,但是如果length()方法返回了一个长值或int值,那么程序的第一行就是执行整数/长除法,因此任何值都会变成0。
如果是这样的话,先把长度转换成双倍。
THe原因第二部分的工作是,这个声明有一个隐式转换从int/long到double,因此任何后续的计算都会导致加倍。
双尺寸= theFile.length();
发布于 2014-09-21 23:38:34
你的问题是整数除法。而不是
theFile.length() / 1000000总是向下旋转,你可以写
theFile.length() / 1000000.0这迫使这是一个非整数除法。
每当您将/放在两个int类型的表达式之间时,结果也将是一个int,并且它将被舍入。
https://stackoverflow.com/questions/25755797
复制相似问题