PHP 金钱字符串转换为整数错误

cod*_*nny 5 php casting currency

我有一个小型的金融应用程序,以 PHP 作为前端,MySQL 作为后端。我有古老的偏见,我在 MySQL 中将货币值存储为美分的整数。我的 HTML 表单允许输入美元值,例如“156.64”,我使用 PHP 将其转换为美分,然后将美分存储在数据库中。

我有一个函数可以从表单中清除美元值,并将其转换为美分。我去掉前导文本,去掉尾随文本,乘以 100 并转换为整数。最后一步是

$cents = (integer) ($dollars * 100);

这几乎适用于所有情况,除了极少数值(例如“156.64”),它始终转换为 15663 美分。为什么要这样做?

如果我这样做:

$cents = (integer) ($dollars * 100 + 0.5);

然后它始终有效。为什么我需要添加该舍入值?

另外,我对将金额存储为整数而不是浮点值的偏见,是否不再需要了?现代浮点计算能否产生足够四舍五入且准确的货币价值,足以保持 100% 准确的会计?

CMS*_*CMS 4

如果您想要精确,您应该在 MySQL 中使用DECIMAL数据类型存储您的货币值。