PHP/MySQL:最好的货币操作/存储实践?
因此,我计划制作一个处理大量资金的应用程序(PHP / MySQL),并且我正在考虑如何使用资金进行存储和操作,指的是PHP浮点数据类型和MySQL十进制。
我在想两个选择。其中之一是以整数美分格式($dollars * 100)操作和存储货币,以便不处理浮点数切值并将其也作为整数存储在数据库中。另一个是将数据库存储为十进制,并在PHP中使用BC Math进行计算。
所以我整晚都在谷歌上搜索,找出哪个是最好的选择,但没有找到明确的答案。我见过的唯一合理的选择是整数美分(我真的不喜欢,因为它意味着在浏览器中每次显示之前和存储在数据库中之前都要从美元转换为美分,反之亦然)。
此外,人们抱怨MySQL十进制(MySQL将小数存储为字符串,将它们作为浮点数等操作),但这些都是旧帖子。根据MySQL文档,当前版本正确处理小数,唯一的抱怨是它截断了超过声明分数长度的值的分数(例如,如果您在声明为decimal(9,2)的列中存储值12.326),但从我的调查中,它会四舍五入它而不仅仅是截断(12.326变成12.33), 在我看来,这是正确的。
而且,我没有找到任何关于将钱存储为小数并使用PHP BCMath进行计算的建议,在我看来,这是因为很少有人知道BC和GMP数学函数。
那么,考虑到精度,速度(BCMath计算速度,MySQL十进制速度与整数)和编程舒适性,使用的最佳选择是什么?