【发布时间】:2014-07-18 16:05:48
【问题描述】:
我正在使用 money_format,格式为 %.2n,但结果很奇怪。
我已经整理了示例代码,所以其他人可以自己测试。
<?php
setlocale(LC_MONETARY, 'en_US');
$deal = array(
array(
'amt' => 1350,
'rate' => .75,
'lod' => 47
),
array(
'amt' => 990,
'rate' => .75,
'lod' => 27
),
array(
'amt' => 4180,
'rate' => .75,
'lod' => 65
),
array(
'amt' => 2370,
'rate' => .75,
'lod' => 26
)
);
foreach ($deal as $value) {
$fee = (($value['amt'] / 1000) * $value['rate']) * $value['lod'];
var_dump($fee);
echo '<br />money_format: ', money_format('%.2n', $fee), '<br />number_format: ', number_format($fee, 2), '<br /><br />';
}
输出:
float(47.5875)
money_format: $47.59
number_format: 47.59
float(20.0475)
money_format: $20.05
number_format: 20.05
float(203.775)
money_format: $203.77
number_format: 203.78
float(46.215)
money_format: $46.22
number_format: 46.22
您会注意到第三个结果,203.775 显示为 $203.77,而不是 $203.78。
我对 money_format 的理解是否遗漏了什么?
phpfiddle 链接:http://phpfiddle.io/fiddle/1909516587
【问题讨论】:
-
为什么不直接使用
number_format,它更容易使用。使用money_format的原因是什么? -
他只是想酷一点,用一个没人用的功能。 :P
-
这似乎是一个错误bugs.php.net/bug.php?id=61787
-
是的,我可以使用 number_format,但这并不能解释结果。因此,为什么我要问我对函数的理解是否不正确。
标签: php rounding-error money-format