问题在于,当我将一个表中的两个或更多个双精度数添加到视图时,而不是给我正确的结果,它会增加大约十个左右的数字。例如0.5 + 1.5 = 1.99999999998或5.5 + 8.5 = 14.0000000001。有任何想法吗? (我知道这是一个n00b问题,我记得在9年级的考试中必须处理类似的东西,但我不记得我当时是怎么做的:P)

有帮助吗?

解决方案

http://dev.mysql.com/ DOC / refman / 5.0 / EN /串functions.html#function_format

你可以用这种方式格式化数字,如果那是你的后续数据吗?

其他提示

将1和1添加为浮点数或双精度数不应该产生除2之外的任何内容。

我发现很难相信除了2之外什么都不会出现0.5 + 1.5。

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

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

但是,我相信你可能会遇到像1.1这样的数字的问题。

为什么呢?因为1/10结果是二进制的重复小数。

尝试在十进制和二进制表示之间转换浮点数时出现问题。有些数字使旅行很好,但其他数字只是近似值。


但是,如果你的例子确实如此,我不知道发生了什么,我很想知道。

  
    

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

  

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

这篇文章很好地解释了这个问题。

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

使用浮点类型时不要期望整数。

不确定你是在寻找解释还是解决方案,但是因为你已经得到了很好的解释......

如果您需要使用数字来表示整数,请使用整数。如果你需要一定程度的精确度(即两个小数位,对于表示金钱的字段),无论如何都要将它存储为整数,但是当你把它放入时,你需要将它除以十进制所需的10倍。将数据库拉出来时,数据库除以相同的数据。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top