android奇怪的浮点数学

android奇怪的浮点数学,android,math,floating-point,Android,Math,Floating Point,可能重复: 我从简单的浮点数学中得到了非常奇怪的行为。例如 //create a float with value of 1.0 float f = 1.0; //take 0.1 from its value f -=0.1; 最初几次,当我减去0.1时,它返回0.9、0.8、0.7。。。。。。 然后由于某种原因,它将返回0.699999999、0.599999999,依此类推。 说这出乎意料是轻描淡写的 所以要解决这个问题,我需要知道它为什么会这样做 或类似于舍入(float)的数学函数

可能重复:

我从简单的浮点数学中得到了非常奇怪的行为。例如

//create a float with value of 1.0
float f = 1.0;
//take 0.1 from its value
f -=0.1;
最初几次,当我减去0.1时,它返回0.9、0.8、0.7。。。。。。 然后由于某种原因,它将返回0.699999999、0.599999999,依此类推。 说这出乎意料是轻描淡写的

所以要解决这个问题,我需要知道它为什么会这样做 或类似于舍入(float)的数学函数,将数字从0.599999舍入到0.6

多谢各位

编辑, 好吧,很抱歉问你lol 有可用的修复程序吗?像圆形(浮动)的东西

其他编辑: 下一个要问这个问题的人,这里有一个解决方案

final DecimalFormat myFormat = new DecimalFormat("#.#");
myFormat.format(myFloatValue)

这会将myFloatValue 0.599999更改为0.6,这是由于浮点表示法的基本限制。某些数字,如0.1,不能用有限精度的base-2算法精确表示。

计算机是有限设备,因此它存储有限精度的浮点数。它将它们存储为二进制浮点数——相对于基数2而不是基数10。以十进制小数表示的有限数不一定以二进制数表示,因此必须舍入才能存储在有限计算机中。在本例中,
0.1
将四舍五入为

0.1000000000000000055511151231257827021181583404541015625

当存储为双精度浮点数时,实际上每一步的减法都比
0.1
多一点。

这可能是所有编程语言中StackOverflow中最常被问到的问题。简短回答:。答案很长:……而且。。这完全是意料之中的行为。我们一天大约有一个。并不是所有的十进制数都可以用浮点二进制表示——“计算机科学101”。所以是否存在一个四舍五入(浮点)等价物?有没有办法显示0.6而不是0.599999?这就是为什么比较像if(f==23.52f){…}这样的浮动通常是个坏主意的原因。好吧,很抱歉今天问这个问题:有没有可能修复?@user1033558:没有损坏的,所以你无法修复它。你的实际问题是什么?问题是我显示这个数字,0.599999999看起来像垃圾。最好是0.6。请尝试以下方法将浮点数
格式(“%.1f”,123.456f)
设置为一个小数位。您可以阅读有关格式的更多信息