Mysql计算问题:1+;1=1.999999999

Mysql计算问题:1+;1=1.999999999,mysql,decimal,Mysql,Decimal,问题是,当我从一个表向一个视图添加两个或多个double时,它不是给我正确的结果,而是添加了大约十个或更多的数字。例如,0.5+1.5=1.999998或5.5+8.5=14.0000000001。有什么想法吗? (我知道这是一个n00b问题,我记得在九年级的考试中必须处理类似的问题,但我不记得当时是怎么做的:P)在处理浮点类型时不要期望整数。很好地解释了这个问题 简而言之,非常大或非常小的浮点数可能会导致计算过程中的精度损失。 如果您的目标是这样的话,您可以用这种方式设置数字格式?不确定您是在

问题是,当我从一个表向一个视图添加两个或多个double时,它不是给我正确的结果,而是添加了大约十个或更多的数字。例如,0.5+1.5=1.999998或5.5+8.5=14.0000000001。有什么想法吗?
(我知道这是一个n00b问题,我记得在九年级的考试中必须处理类似的问题,但我不记得当时是怎么做的:P)

在处理浮点类型时不要期望整数。

很好地解释了这个问题

简而言之,非常大或非常小的浮点数可能会导致计算过程中的精度损失。


如果您的目标是这样的话,您可以用这种方式设置数字格式?

不确定您是在寻找解释还是解决方案,但由于您已经获得了指向好的解释的指针

如果你需要你的数字表现得像整数,使用整数。如果您需要有限的精度(即,对于表示货币的字段,小数点后两位),请将其存储为一个整数,但在将其放入数据库时,将其乘以您需要去除小数点的任何因子10,然后在将其取出时再除以该因子

因此,如果您要表示一个价格为3.99美元的小部件,请将399放入widget.cost字段


不知道这是否适用于你的情况。但一般的经验法则是,浮点数始终只是近似值。:-)如果精度很重要,请找出一种使用整数的方法。

将1和1作为浮点或双精度相加只能得到2

我发现很难相信0.5+1.5的结果是2以外的任何东西

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

我不想说我不相信你的例子,但我不相信

但是,我相信您可能在使用1.1之类的数字时遇到问题

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

当试图在十进制和二进制表示形式之间转换浮点数时,就会出现问题。有些数字使旅行顺利,但其他数字只是近似值


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

浮点数始终只是近似值。:-)如果精度很重要,请找出使用整数的方法


根据我的经验,当我使用十进制数据类型而不是float/double时,我总能得到精确的结果。

这是标准的浮点问题。请搜索[floating-point],查找100多个类似问题。我的高中数学老师告诉我们。9999…=1,所以我不明白你的问题是什么?:)我想修正它,让它显示2而不是1.9999999…@MitMaro.9999。。。无限重复的9实际上是1。@每个人:1.999999998(甚至1.9999999999)不等于1.999。。。所以整个关于无限小数的讨论都是无关紧要的。(杰森的数学老师是对的。)事实上,是的,这些例子只是例子。真正的问题包括来自不同表格的大量汇总,我认为这对发布整个流程没有任何帮助……我知道!你的例子只有在我真正注意到它们之前才有真实感。所以我给你+1表示成功的欺骗。您可以看出,SOER已经多次看到类似的问题,我们实际上不再阅读它们了。:-)我甚至会说,“如果你不知道浮点类型的预期用途,就不要使用它们。”而“跟踪便士”或“添加小数点”并不是预期的用途。