sprintf函数

http://www.xhldev.com/news/44-cn.html

在php中sprintf经常被用来格式字符串,当sprintf用%.*f格式化时经常被认为是“四舍五入”,但实事上这个“四舍五入”并不是数学上的“四舍五入”,而是“四舍六入五成双”,英文中被称为”round half to even”或”Banker’s rounding”,如下面的这个地址:

http://stackoverflow.com/questions/10357192/printf-rounding-behavior-for-doubles/10357252#10357252

“四舍六入五成双”是指,当保留精度的下一位不是5时,按正常的四舍五入;当保留精度的下一位是5时,5的前一位是奇数,则进位,是偶数,则舍弃;而如果5的后面还有大于0的部分时,则无论5的前一位是奇数还是偶数,都进行进位。更完整的说明请见: http://blogs.msdn.com/b/ericlippert/archive/2003/09/26/bankers-rounding.aspx

1.当保留精度的下一位不是5时,按正常的四舍五入;

$str = 12.464;
echo sprintf('%.2f', $str);
//out 12.46

2.当保留精度的下一位是5时,5的前一位是奇数,则进位,是偶数,则舍弃;

前一位是偶数:
$str = 12.465;
echo sprintf('%.2f', $str)
//out 12.46
前一位是奇数:
$str = 12.455;
echo sprintf('%.2f', $str)
//out 12.46

3.而如果5的后面还有大于0的部分时,则无论5的前一位是奇数还是偶数,都进行进位

$str = 12.4651;
echo sprintf('%.2f', $str)
//out 12.47
原文地址:https://www.cnblogs.com/qdrs/p/8777856.html