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