MySQL乘浮点数列:1*7.6得到7.5999904632568?

MySQL乘浮点数列:1*7.6得到7.5999904632568?,mysql,floating-accuracy,multiplication,Mysql,Floating Accuracy,Multiplication,当我进行查询时选择1*7.6,它会给我7.6 但当我进行列乘法时(products.commission*sell.amount): 这让我感到惊讶 ID | userid | date | idprod | amount | Category | Name | commision | fee 60 | 1 | 15-10-01 | 21 | 1 | Volish | Black | 7.6(float) | 7.599999904632568 为什

当我进行查询时
选择1*7.6
,它会给我
7.6

但当我进行列乘法时(products.commission*sell.amount):

这让我感到惊讶

ID | userid | date     | idprod | amount | Category | Name  | commision  | fee
60 | 1      | 15-10-01 | 21     | 1      | Volish   | Black | 7.6(float) | 7.599999904632568

为什么?

感谢您在评论中的帮助

解决方案


浮点是二进制的,十进制是。。。decimal,因此我将列更改为decimal(16,9)

在进行比较时,必须将值转换为整数/小数,而不是浮点数

(CAST(products.commision AS Decimal(7,2)) * CAST(sold.amount AS Decimal(7,2))) as fee
从和

小数将该值设置为最大大小为7位,最大精度为2位的小数(12345.67)

编辑:我不确定将强制转换添加到原始值或简单地强制转换以下答案是否更有效

(products.commision  * sold.amount ) as CAST(fee AS Decimal(7,2))

您正在使用浮点列。小数点(19,6)很可能就是你想要的……可能是因为
产品。佣金
不完全是
1
售出的。金额
不完全是
7.6
,但其本身的任何一个值都足够接近,可以显示出来。浮点数很棘手。@Edward我不明白?一般来说,钱是十进制的,而不是十进制的FLOAT@Mr.Llama它正好是1和7.6,我必须精确更改列类型可能是最好的总体策略,但如果这是一个单独的问题,您可以在查询中更改这些内容。还有一个问题,如果我有17,56,它是17,56,但是当我有18,00的时候,我只想要18。我该怎么做?你在说什么?这些数字在SQL查询中、数据库中或?如果我有Commission=
7.00
我希望它在所有意图和目的下都是
7
7.00
完全等于
7
,如果您将值输出到浏览器,那么您可以进行一些清理以删除多余的零。
(products.commision  * sold.amount ) as CAST(fee AS Decimal(7,2))