【发布时间】:2013-02-18 14:45:59
【问题描述】:
我有一些价格和折扣金额将存储在 PHP 代码的配置变量中。我想知道是否需要将它们存储为字符串。
例如,执行以下操作是否安全?
$price = 14.95;
$volume_discount = 0.3;
还是应该将它们存储为字符串?
$price = '14.95';
$volume_discount = '0.3';
我知道,除非您使用 BC Math,否则比较浮点数和使用浮点数进行计算会产生意想不到的结果。但我想知道是否按原样打印出存储的值。我尝试回显浮动版本,它们按预期显示,但我想知道这是否可靠。
注意:我用expected这个词来解释外行人的期望。正如 Eric 指出的那样,精确的十进制浮点数实际上不是预期的结果。
编辑:我目前关心的代码检查数量并确定是否应应用折扣。然后进行如下计算:
$price -= round($price * $volume_discount, 2);
我通常使用number_format 来格式化显示价格,但我注释掉了我的测试格式。到目前为止,无论价格或折扣值如何,PHP 都给了我想要的结果。然而,JavaScript 并不总能给我想要的结果。这就是让我再次查看我的 PHP 代码的原因。
显然,我将调整 JavaScript,因为这是错误出现的地方,但我试图决定是否需要重构我的 PHP 代码。
向我说明问题的数字是 149.95 * 0.3。 PHP 显示 44.985,JavaScript 显示 44.98499999999999。所以,即使四舍五入到小数点后两位,我得到的数字也不同。
【问题讨论】:
-
取决于您将使用的代码。
标签: php floating-point