MySQL的计算问题:1 + 1 = 1.999999999(Mysql calculation i

2019-07-31 01:45发布

问题是这样的,当我从一个表中添加两个或更多的双打到一个视图,而不是给我正确的结果,它增加了约十来更多的数字。 例如为0.5 + 1.5 = 1.99999999998或5.5 + 8.5 = 14.0000000001。 有任何想法吗? (我知道这是有点的n00b问题,我记得有对付像在九年级考试的东西,但我不记得我是如何做到了当年:P)

Answer 1:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_format

您可以格式化数字这样如果那是你以后有什么?



Answer 2:

添加1和1为浮点或双精度不应导致任何东西,但2。

我觉得很难相信,0.5 + 1.5就出来什么,但2。

所有这些数字可以正确地二进制浮点表示。

我不想说我不相信你的例子,但我不知道。 :-)

不过,我相信,你可能有一个数字,如1.1麻烦。

为什么? 因为1/10原来是二进制的重复小数。

试图十进制和二进制表示法之间的浮点数转换时,问题就来了。 一些数字成行很好,但其他的则只能近似。


但是,如果你的例子真的这样做,我不知道发生了什么,我很想知道。



Answer 3:

浮点数始终只是近似值。 :-)如果精度问题,想出一个办法来使用整数。

根据我的经验,当我使用十进制数据类型,而不是浮点/双精度的,我也总是得到精确的结果。



Answer 4:

这篇文章介绍了这个问题非常好。

概括地说,非常大的,或非常小的浮点数可能导致计算过程中的精度损失。



Answer 5:

当你与浮点类型的工作,不要指望整数。



Answer 6:

Not sure if you're looking for an explanation or a solution, but since you've already gotten pointers to good explanations....

If you need your numbers to behave like integers, use integers. If you need a finite degree of precision (ie, two decimal places, for fields that represent money), store it as an integer anyway, but multiply it by whatever factor of 10 you need to get rid of the decimal when you put it into the database and divide by the same when you pull it back out.

So if you're representing a widget that costs $3.99, you put 399 into the WIDGET.cost field.

Dunno if that applies to your situation or not. But the general rule of thumb is that floating point numbers are ALWAYS mere approximations. :-) If precision matters, figure out a way to use integers.



文章来源: Mysql calculation issues: 1+1=1.999999999
标签: mysql decimal