这可能是一个简单的解决方案,但在我运行此查询的过去几个小时里,这让我很头疼
insert into payment set id ='13914', amount ='48.00', discount ='0.00',
total ='48.00', fees ='2', charges ='', staus ='2'
值48.00
在db列中保存为48
。 db列类型是double。
答案 0 :(得分:8)
您的数据存储正确。当你使用DOUBLE时,48 == 48.00。
检索数据时,请尝试
SELECT ROUND(amount,2) amount,
ROUND(discount, 2) discount
FROM payment
如果您真的必须在数字末尾看到.00
。
请请,为了专业人士和未来的用户,了解浮点数的工作原理。
答案 1 :(得分:5)
在docs中轻松找到:
由于浮点值是近似值而未存储为精确值,因此尝试在比较中将它们视为精确值可能会导致问题。它们还受平台或实现依赖性的影响。
进一步more:
尝试将浮点值视为比较中的精确值可能会导致问题。它们还受平台或实现依赖性的影响。 FLOAT和DOUBLE数据类型受这些问题的影响。对于DECIMAL列,MySQL执行精度为65位十进制数的操作,这可以解决最常见的不准确问题。
所以请使用DECIMAL
答案 2 :(得分:-2)
SELECT ROUND(金额,2)金额, ROUND(折扣,2)折扣 付款