提问人: 提问时间:10/15/2015 最后编辑:Martin 更新时间:10/15/2015 访问量:5671
MySQL乘以浮点列:1*7.6给出7.599999904632568?
MySQL Multiplying float columns: 1*7.6 gives 7.599999904632568?
问:
当我进行查询时,它让我感到震惊SELECT 1*7.6
7.6
但是当我进行列乘法(products.commision*sold.amount)时:
SELECT *,
(products.commision*sold.amount) as fee
FROM sold
RIGHT JOIN products
ON sold.idprod=products.ID
AND DATE(sold.date) BETWEEN DATE('2015-10-01') AND DATE('2015-10-31')
WHERE sold.userid="1"
ORDER BY sold.userid
它让我大吃一惊
ID | userid | date | idprod | amount | Category | Name | commision | fee
60 | 1 | 15-10-01 | 21 | 1 | Volish | Black | 7.6(float) | 7.599999904632568
为什么?
答:
0赞
user5306544
10/15/2015
#1
感谢您在评论中的帮助,
溶液
Float 是二进制的,decimal 是......decimal,所以我将我的列更改为 decimal(16,9)
3赞
Martin
10/15/2015
#2
在进行比较时,您必须将值类型转换为整数/小数,而不是浮点数
(CAST(products.commision AS Decimal(7,2)) * CAST(sold.amount AS Decimal(7,2))) as fee
从 https://dev.mysql.com/doc/refman/5.0/en/cast-functions.html 并在 MySQL 中将浮点数转换为十进制
小数点将值设置为小数点,其中 7 位数字为最大大小,2 位数字为最大精度 (12345.67)
编辑:我不确定将 CAST 添加到原始值或简单地转换答案(例如
(products.commision * sold.amount ) as CAST(fee AS Decimal(7,2))
评论
0赞
Martin
10/15/2015
更改列类型可能是最好的整体策略,但如果这是一个孤立的问题,则可以在查询中更改这些内容。
0赞
10/15/2015
还有一个问题,如果我有 17,56,那就是 17,56,但是当我有 18,00 时,我只想要 18。我该怎么做?
0赞
Martin
10/15/2015
你在哪里说?这些数字在SQL查询中或数据库中的什么位置?
0赞
10/15/2015
如果我有佣金=我希望它是7.00
7
1赞
Martin
10/15/2015
对于所有意图和目的,正好等于 ,如果您将值输出到浏览器,那么您可以进行一些清理以删除多余的零。stackoverflow.com/questions/5149129/......7.00
7
评论
products.commission
1
sold.amount
7.6