MySQL Multiplying float columns: 1*7.6 gives 7.599999904632568?
当我查询SELECT 1*7.6时,它把我引到7.6上。
但当我进行列乘法时(products.commission*seld.amount):
它使我感到难受
1 2
| ID | userid | date | idprod | amount | Category | Name | commision | fee
60 | 1 | 15-10-01 | 21 | 1 | Volish | Black | 7.6(float) | 7.599999904632568 |
为什么?
- 您使用的是浮动列。十进制(19,6)很可能是你要找的……
- 可能是因为products.commission不完全是1或sold.amount不完全是7.6,但它本身的任何一个值都非常接近,可以这样显示。浮点数很棘手。
- @爱德华,我不明白?
- 一般来说,货币是十进制的,不是浮动的。
- @拉玛先生,正是1点和7点6分,我得说清楚
- 您的MySQL服务器是在32位或64位计算机上运行的?
- @Marcaudet 64位
- @草莓有什么区别?钱也是一个数字?
- 哦,等等,我明白了,浮点数是二进制的。
- 嗯,我把这些列设为十进制,但不能将Commission设置为7.6?只有7和8?
- 它说是十进制(10,0)?
- 双向飞碟的这个答案是一个思考差异的好方法。
- @叶爱德华,我刚读过,现在我知道有什么不同了
当进行比较时,您必须将值类型转换为整数/小数,而不是浮点值。
来自https://dev.mysql.com/doc/refman/5.0/en/cast-functions.html并在mysql中将浮点转换为十进制
十进制将值设置为十进制,其中7位为最大大小,2位为最大精度(12345.67)。
编辑:我不确定将强制转换添加到原始值或简单地强制转换答案是否更有效,例如
1
| (products.commision * sold.amount ) as CAST (fee AS Decimal(7,2)) |
- 哦,谢谢,我想我必须改变列的类型
- 更改列类型可能是最好的总体策略,但是如果这是一个单独的问题,您可以在查询中更改这些内容。
- 还有一个问题,如果我有17,56,它是17,56,但是当我有18,00,我只想要18。我该怎么做?
- 你在说什么?这些数字在SQL查询或数据库中的位置,还是?
- 如果我有佣金=7.00,我希望是7
- 但当它是7.54的时候,我希望它是7.54的。
- 我该怎么做?
- 无论出于何种目的,7.00与7完全相同,如果要将值输出到浏览器,则可以进行一些清除以删除多余的零。stackoverflow.com/questions/5149129/…
- 哦,我不知道我能那样做。谢谢!
- 不用担心:)很高兴能帮上忙
感谢您的评论帮助,
解决方案
浮点是二进制的,小数是…十进制,所以我把列改为十进制(16,9)