[英]PHP: number_format rounding
嗨,我一直有一個問題將數字四舍五入到-0而不是一個0
碼:
<?php
$num= 0.000000031;
$round = number_format((float)$num, 1, '.', '');
echo $round * -1;
?>
輸出: -0
預期產量: 0
我一直在尋找任何解決方案,但沒有找到。
親切地解釋並幫助我為什么它會向上舍入到-0而不是0 ? 謝謝
舍入不是-0。
$ round變量在最后一行之前包含這個:
string(3) "0.0"
您可以通過添加以下行來驗證這一點:
var_dump($round);
在回聲之前。
因此,如果將“0.0”(字符串)乘以-1,則結果將為“-0”
因為(字符串)0在乘法和之前被轉換為(float)0
(float)0 * -1 = -0
php5 -r 'var_dump((float)0*-1);'
float(-0)
基於浮點數行為,這是完全正常的。 (更多細節: http : //en.wikipedia.org/wiki/Signed_zero )
如果這是一個問題,你可以添加0以避免這種“魔術”:
php5 -r 'var_dump((float)0*-1+0);'
float(0)
你PHP代碼它沒有組織。
我假設第二行的var $ xx是$ num。
然后,您必須首先執行所有操作(操作層),然后執行演示(表示層):
<?php
// Operation layer
$num = 0.000000031;
$round = $num * -1;
// Presentation layer
echo number_format($round, 1, '.', '');
當你執行number_format檢索字符串而不是數字時。
由於number_format返回字符串,因此需要將其強制轉換以獲得預期結果。
<?php
$num= 0.000000031;
$round = number_format((float)$num, 1, '.', '');
echo (int)$round * (-1); //print 0
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.