【问题标题】:Is working with money (decimal numbers) in PHP considered safe?在 PHP 中使用金钱(十进制数)是否安全?
【发布时间】:2026-01-04 06:05:02
【问题描述】:

我的 MySQL 数据库中有一个 items 表,其中有一个名为 priceDECIMAL(10,2) 字段。

在获取这些值时,在 PHP 中使用这些数字进行计算等是否安全?或者我最终会出现潜在的舍入错误以及处理浮点数据类型时常见的类似问题?

PHP 如何在幕后处理这些事情?用 PHP 进行货币计算安全吗?

【问题讨论】:

  • PHP Pet Peeve #1329:否 decimal 数据类型。 AFAIK,在幕后 PHP 将使用(喘气)浮点运算。那么是的,你将面对rounding errors
  • 不知道php,但最好只使用整数。稍后根据需要将美分转换为美元(或其他)很容易。
  • 你能依靠 MySQL 进行计算,而 PHP 只是为了展示吗?

标签: php decimal currency


【解决方案1】:

您可以使用执行任意精度数学运算的 PHP 库,例如 BC MathGMP

虽然有时使用美分或可能的最小货币单位有效,但如果您遇到必须处理美分的情况怎么办?例如,如果您正在处理买卖股票,则必须具有比美分更高的精度。在这种情况下,您必须使用任意精度数学。

【讨论】:

  • +1 用于提及仅处理美分不起作用的极端情况
【解决方案2】:

大多数人以 PHP 中的最小面额来衡量货币 - 例如,10 澳元将显示为 1000 美分。

然后/ 100 得到美元是微不足道的,你不会得到例如。 4.9999999 浮点运算导致的值。

或者,您可以使用浮点数并四舍五入到最接近的最小分数值(例如,可能是 5 的倍数)。

似乎已经知道了,但对其他人来说,this is still required reading :)

【讨论】: