% .2n 형식의 money_format을 사용하고 있지만 이상한 결과가 나타납니다.money_format (샘플 코드 포함)로 예기치 않은 반올림
다른 사람들이 스스로 테스트 할 수 있도록 샘플 코드를 작성했습니다.
<?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.77로 203.775 나타납니다 $ 203.78에 반대.
money_format에 대한 이해가 부족합니다.
phpfiddle 링크 :
<?php
setlocale(LC_MONETARY, 'en_US');
function _money_format($number, $decimals=2){
$number = number_format($number, $decimals);
$local_settings = localeconv();
$currency_symbol = $local_settings['currency_symbol'];
return $currency_symbol . $number;
}
echo _money_format('23.4567');
?>
아직도 당신이 필요 가야로 number_format를 사용하여 + 통화 기호를 받고 :
http://phpfiddle.io/fiddle/1909516587
, 그것은 훨씬 더 쉽게 사용. 'money_format'을 사용하는 이유는 무엇입니까? – ssergei
그는 차가워지고 아무도 사용하지 않는 기능을 사용하기를 원합니다. : P – Dharman
이것은 버그 인 것 같습니다. https://bugs.php.net/bug.php?id=61787 – iautomation