Jan*_*ela 2 format android numbers rounding
我将一些数据存储在数据库中,然后用光标读取这些数据.所有数据都是56.45,3.04,0.03类型,因此小数点后面有两个数字.现在我想总结它们但它似乎并不容易......我得到那些数字c.getDouble(3)
然后我将它添加到sum变量,如:
sum+= c.getDouble(4) * multi
Run Code Online (Sandbox Code Playgroud)
multi是一个介于1和100之间的整数.现在我的问题是,在得到sum变量之后我得到一个如下数字:59.51999999999999999.我没有发布代码,但除了string.valueOf
使数字出现在我的小部件上之外没有转换.所以有人经历过这个吗?据我所知它应该是59.52,但我用99999得到那个数字......为什么会这样?(有趣的是,有一个Math.round()
不起作用,即使我设置(总和)*100/100,我得到59.0 ..提前谢谢!
您的数字以十进制表示,但二进制表示计算机.
在十进制和二进制中,某些分数无法精确表示.
例如,1/3不能精确地用十进制表示.你只能用0.3333333333之类的方法来近似它.但是如果你尝试做3*0.3333333333,你最终会得到0.9999999999而不是1.0000000000.
在二进制中,您有相同的问题,但有不同的分数.
因此,有时当您从十进制转换为二进制并再次返回时(这是计算机基本上必须为您执行浮点运算),即使所有数字在十进制中都非常精确,您也会得到精度误差.当计算机使用它们的二进制近似值时,会引入近似值并导致小错误.
这实际上是编程中非常常见的问题.有关详细信息,请参阅每个计算机科学家应该知道的关于浮点运算的内容.
归档时间: |
|
查看次数: |
350 次 |
最近记录: |