在mysql中存储金额

Dav*_*vid 61 mysql floating-point currency fixed-point

我想将3.50存储到mysql表中.我有一个存储它的浮动,但它存储为3.5,而不是3.50.如何才能得到尾随零?

Mor*_*dur 94

不要将货币值存储为浮动,使用DECIMAL或NUMERIC类型:

MySQL数字类型的文档

编辑和澄清:

Float值容易受到舍入误差的影响,因为它们的精度有限,所以除非你不关心你只得到9.99而不是10.00,你应该使用DECIMAL/NUMERIC,因为它们是没有这些问题的定点数.


And*_*ner 37

将钱存入浮动通常不是一个好主意,因为在计算中会出现舍入误差.

考虑使用DECIMAL(10,2)代替.


gra*_*eds 19

它的存储是3.5,3.50还是3.500真的很重要吗?

真正重要的是它从数据库中检索后的显示方式.

或者我在这里遗漏了什么?

也不要使用浮点数,使用小数.Float有各种各样的舍入问题,并不是很大.

  • 我确实提到了舍入问题。我的观点是他不应该担心它是如何存储的,而是它是如何显示的。您不会将财务信息存储到 2 个小数位 - 汇率是 5,我们存储到 6,但只显示为 2。 (2认同)

Thi*_*lem 17

要存储值,可以使用DECIMAL(10,2)字段,然后可以使用FORMAT函数:

SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
Run Code Online (Sandbox Code Playgroud)


And*_*lam 5

为什么要将"3.50"存储到数据库中?就数据库而言,3.5 == 3.50 == 3.5000.

您的演示文稿和数字/日期/等格式应在应用程序中完成,而不是在数据库中完成.


Mat*_*tsT 5

如果使用DECIMAL或NUMERIC类型,则可以将它们声明为例如DECIMAL(18,2),即使它们为0也会强制取2个小数.根据您期望的值大小,您可以更改第一个参数的值.