12

这个问题之前已经被问过很多次了,但是我发现关于这个话题的意见相互矛盾,所以我想我会再次提出这个问题,希望能有一个更统一的结论。

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

我最初的想法是将值存储为相关货币的最小单位的有符号整数。例如,如果我想存储价值 $1.25,我会插入125数据库,因为 USD 的最小单位是 $0.01。这种方法的好处是 MySQL 会自动舍入到最接近的整数。例如,如果美元值为 1.259 美元,我可以插入125.9,它会自动四舍五入并存储为1261.26 美元。

所以你怎么看?这是一种合理的方法还是有更好的方法?

4

2 回答 2

13

Financial data can be stored as DECIMAL(p,s) where p is the number of significant digits, and s is the scale (number of places to the right of the decimal point). See The MySQL documentation.

Also from O'Reilly's High Performance MySQL, chapter 3:

"...you should use DECIMAL only when you need exact results for fractional numbers--for example, when storing financial data."

From O'Reilly's Learning MySQL:

DECIMAL is, "...A commonly used numeric type. Stores a fixed-point number such as a salary or distance..."

And MySQL Pocket Reference:

DECIMAL "...Stores floating-point numbers where precision is critical, such as for monetary values."

于 2012-06-08T17:03:01.367 回答
2

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

您必须记住,要向用户显示 $ 值,您需要始终进行除法运算或某种格式设置。

如果一切都以美分或美元为单位,调试公式/计算会更容易吗?你会以美分或美元显示价值吗?等等

保持简单,但无论哪种方式,您都必须使用小数。

于 2012-06-08T16:57:16.810 回答