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

Ahm*_*aad 1 mysql sql floating-point

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

insert into payment set id ='13914', amount ='48.00', discount ='0.00',
     total ='48.00', fees ='2', charges ='', staus ='2'
Run Code Online (Sandbox Code Playgroud)

该值48.00仅在db列中保存48.db列类型是double.

O. *_*nes 8

您的数据存储正确.当你使用DOUBLE时48 == 48.00.

当您检索数据时尝试

SELECT ROUND(amount,2) amount,
       ROUND(discount, 2) discount
  FROM payment
Run Code Online (Sandbox Code Playgroud)

如果你真的要看到.00数字的末尾.

请为了行业和未来用户的利益,了解浮点数的工作原理.


Ale*_*hin 5

文档中轻松找到:

由于浮点值是近似值而未存储为精确值,因此尝试在比较中将它们视为精确值可能会导致问题.它们还受平台或实现依赖性的影响.

另外更多:

尝试将浮点值视为比较中的精确值可能会导致问题.它们还受平台或实现依赖性的影响.FLOAT和DOUBLE数据类型受这些问题的影响.对于DECIMAL列,MySQL执行精度为65位十进制数的操作,这可以解决最常见的不准确问题.

所以请使用 DECIMAL