Heim  >  Artikel  >  Backend-Entwicklung  >  关于sprintf截取小数问题

关于sprintf截取小数问题

WBOY
WBOYOriginal
2016-10-23 00:12:482284Durchsuche

问题:保留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浮点数四舍五入还是五舍六入(浮点数的表示形式有关)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn