簡體   English   中英

PHP:number_format舍入

[英]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 

?>

PHP沙盒

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM