Android 安卓数字格式有点错误,我得到的不是3.5而是3.49999999,为什么?
我将一些数据存储在数据库中,然后用光标读取这些数据。所有数据都是56.45、3.04、0.03类型,因此小数点后有两个数字。现在我想总结一下,但这似乎并不容易。。。我使用Android 安卓数字格式有点错误,我得到的不是3.5而是3.49999999,为什么?,android,numbers,format,rounding,Android,Numbers,Format,Rounding,我将一些数据存储在数据库中,然后用光标读取这些数据。所有数据都是56.45、3.04、0.03类型,因此小数点后有两个数字。现在我想总结一下,但这似乎并不容易。。。我使用c.getDouble(3)获得这些数字,然后将其添加到sum变量中,如下所示: sum+= c.getDouble(4) * multi multi是介于1和100之间的整数。现在我的问题是,在得到sum变量后,我得到一个数字,比如:59.5199999999999。我没有发布代码,但除了一个字符串.valueOf之外,没有
c.getDouble(3)
获得这些数字,然后将其添加到sum变量中,如下所示:
sum+= c.getDouble(4) * multi
multi是介于1和100之间的整数。现在我的问题是,在得到sum变量后,我得到一个数字,比如:59.5199999999999。我没有发布代码,但除了一个字符串.valueOf
之外,没有任何转换,用于使数字显示在我的小部件上。有人经历过吗?据我计算,应该是59.52,但我得到的数字是99999。。。为什么会这样?(有趣的是,Math.round()
不起作用,即使我设置了(sum)*100/100,我也能得到59.0。)。。
提前感谢!您的数字对您来说是十进制的,但对计算机来说是二进制的 在十进制和二进制中,有些分数不能精确表示 例如,1/3不能精确地用十进制表示。您只能用类似于0.3333333的值来近似它。但是,如果您尝试使用3*0.3333333333,则结果将是0.99999999,而不是1.0000000000 在二进制中,您有相同的问题,但分数不同 所以,有时当你从十进制转换成二进制再转换回来时(这是计算机为你做浮点运算所必须做的事情),即使所有的数字在十进制中都非常精确,但在精度上也会有很小的误差。当计算机使用二进制近似值时,会引入近似值,从而产生很小的误差
这实际上是编程中一个非常常见的问题。有关更多详细信息,请参阅。其他方法,您可以将sum变量定义为
double
,然后可以为sum变量设置NumberFormat
示例:
double sum = 21.2015;
NumberFormat formatter = new DecimalFormat("#.##");
formatter.format(sum);
看看这个网站:我认为这可能会有帮助。我们也有一些解决方案可以尝试,直到我们得到最好的一个。