在MySQL数据库中存储货币值

12

这个问题已经被问了很多次,但是我发现有关这个主题的意见存在分歧,所以我想再次提出这个问题,希望能得出更统一的结论。

我想在我的数据库中存储一个货币值。假设所有条目都是相同类型的货币(例如美元),并且允许正负值。

我的初始想法是将该值作为带符号整数存储为相关货币的最小单位。例如,如果我要存储价值1.25美元,则会在数据库中插入125,因为美元的最小单位是0.01美元。这种方法的好处是MySQL会自动四舍五入至最近整数。例如,如果美元值为1.259美元,则可以插入125.9,这将自动四舍五入并存储为126或1.26美元。

那么,你认为呢?这是一个可行的方法,还是有更好的方法?


1
DECIMAL(p,s) http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.htmlDECIMAL(p,s)是MySQL中的一种固定点数据类型,用于存储精确的十进制数值。其中,p表示数字的总位数,s表示小数点后的位数。更多详细信息请参考上述链接。 - DavidO
啊,这样就合理多了。那么在显示数字之前就没有必要除以100了。谢谢! - David Jones
2个回答

13

金融数据可以以 DECIMAL(p,s) 的形式存储,其中p是有效数字位数,s是小数点右侧的位数。参见MySQL文档

此外,来自O'Reilly的高性能MySQL,第三章:

"......只有当您需要精确处理分数时(例如,存储金融数据)才应该使用DECIMAL。"

来自O'Reilly的学习MySQL

DECIMAL 是“……常用的数字类型之一。存储固定点格式的数字,例如工资或距离……”

还有MySQL Pocket Reference

DECIMAL “…存储浮点数,在需要精度关键的情况下使用,例如货币价值。”


2

你描述的方法没有问题。在这个问题上,没有对错之分。

需要记住的是,为了向用户显示$值,您需要始终执行除法运算或某种格式化。

如果所有公式/计算都以美分或美元为单位,那么调试公式/计算是否更容易?您将以美分还是美元显示值等等。

保持简单,但无论如何,您都必须使用小数。


1
实际上,如果您需要精度,就不能将其存储为int,因为您将丢失分数值,而这对于政府税收等事项是必要的。 - Alan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接