将48.00值保存到MySQL数据类型的两倍,它保存为48

时间:2016-01-28 18:58:54

标签: mysql sql floating-point

这可能是一个简单的解决方案,但在我运行此查询的过去几个小时里,这让我很头疼

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。

3 个答案:

答案 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)折扣   付款