这个问题之前已被多次提出,但我发现这个主题的意见相互矛盾,所以我想我会再次提出这个问题,希望得到更统一的结论。
我想在我的数据库中存储货币值。假设所有条目都是相同类型的货币(例如美元),并且允许正值和负值。
我最初的想法是根据相关货币的最小单位将值存储为有符号整数。例如,如果我想存储值$ 1.25,我会将125
插入数据库,因为最小的USD单位是0.01美元。这个方法的好处是MySQL将自动舍入到最接近的整数。例如,如果美元价值是1.259美元,我可以插入125.9
,它会自动舍入并存储为126
或1.26美元。
那么,您怎么看?这是一种合理的方法还是有更好的方法?
答案 0 :(得分:13)
财务数据可以存储为DECIMAL(p,s)
,其中p是有效位数,s是小数位数(小数点右边的位数)。见The MySQL documentation。
同样来自O'Reilly的High Performance MySQL,第3章:
“......只有在需要精确结果时才应使用DECIMAL 小数 - 例如,存储财务数据时。“
来自O'Reilly的Learning MySQL:
DECIMAL
是,“......一种常用的数字类型。存储一个定点 工资或距离等数字......“
DECIMAL
“...存储精度为的浮点数 关键,例如货币价值。“
答案 1 :(得分:2)
您描述的方法没有任何问题。谈到这个问题没有对错。
您必须记住,要向用户显示$值,您需要始终执行除法运算或某种格式化。
如果所有内容都以美分或美元计算,调试公式/计算会更容易吗?你会以美分或美元显示价值吗?等
保持简单,但无论哪种方式,您都必须使用小数。