首頁 > 後端開發 > php教程 > 關於sprintf截取小數問題

關於sprintf截取小數問題

WBOY
發布: 2016-10-23 00:12:48
原創
2369 人瀏覽過

問題:保留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浮點數四捨五入還是五捨六入(浮點數的表示形式有關)

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板