首頁  >  文章  >  後端開發  >  關於sprintf截取小數問題

關於sprintf截取小數問題

WBOY
WBOY原創
2016-10-23 00:12:482286瀏覽

問題:保留1位小數,不四捨五入,為整數時補0

很多人都說用sprintf('%.1f',$str);,但是取出來的結果還是有問題,
最後用這種方法解決:echo sprintf('%.1f', floor( $str));

<code><?php
    $str1 = 12.34;
    $str2 = 12.35;
    $str3 = 12.36;
    echo sprintf('%.1f',$str1);//12.3
    echo sprintf('%.1f',$str2);//12.3
    echo sprintf('%.1f',$str3);//12.4
    
    echo sprintf('%.1f', floor($str3));//12.3
?>
</code>

不是說不四捨五入的嗎?為什麼按四捨五入,5卻不入,6才入;
而其他函數number_format($str)都是在5就入了,這是為什麼?

回覆內容:

問題:保留1位小數,不四捨五入,為整數時補0

很多人都說用sprintf('%.1f',$str);,但是取出來的結果還是有問題,
最後用這種方法解決:echo sprintf('%.1f', floor( $str));

<code><?php
    $str1 = 12.34;
    $str2 = 12.35;
    $str3 = 12.36;
    echo sprintf('%.1f',$str1);//12.3
    echo sprintf('%.1f',$str2);//12.3
    echo sprintf('%.1f',$str3);//12.4
    
    echo sprintf('%.1f', floor($str3));//12.3
?>
</code>

不是說不四捨五入的嗎?為什麼按四捨五入,5卻不入,6才入;
而其他函數number_format($str)都是在5就入了,這是為什麼?

自己實測了一下,目測是浮點數表示的精確度問題

<code class="php"><?php
    echo sprintf('%.0f', 12.5); //12
    echo sprintf('%.0f', 15.5); //16
?></code>

參考

linux浮點數四捨五入還是五捨六入(浮點數的表示形式有關)

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn