我有一个小型金融应用程序,前端是 PHP,后端是 MySQL。我有古老的偏见,我在 MySQL 中将货币值存储为整数美分。我的 HTML 表单允许输入美元值,例如“156.64”,我使用 PHP 将其转换为美分,然后将美分存储在数据库中。
我有一个函数可以从表单中清除美元值,并将其转换为美分。我去掉前导文本,去掉尾随文本,乘以 100 并转换为整数。最后一步是
$cents = (integer) ($dollars * 100);
这对几乎所有东西都适用,除了像 '156.64' 这样的极少数值始终转换为 15663 美分。为什么这样做?
如果我这样做:
$cents = (integer) ($dollars * 100 + 0.5);
然后它一直有效。为什么我需要添加该舍入值?
另外,我对将金额存储为整数而不是浮点值的偏见是否不再需要?现代浮动计算是否会产生足以保持 100% 准确会计的完美四舍五入和准确的货币价值?