答案 0 :(得分:4)
这不是严格的四舍五入:
> printf '%.0f\n' 2.5
2
> printf '%.0f\n' 3.5
4
如果要舍入大量值,这是一种用于抵制偏见的舍入形式;其中大约一半将向下舍入,另一半向上舍入。规则是,如果整数部分是偶数,则向下舍入,如果整数部分是奇数,则向上舍入。
然而,这仅是对特定舍入方案的解释,并不保证printf
的所有实现都使用该方案。
答案 1 :(得分:0)
来自printf
命令的POSIX规范:
不需要printf()的浮点格式转换规范,因为shell中的所有算术都是整数运算。 awk实用程序执行浮点计算并提供自己的printf函数。 bc实用程序可以执行任意精度的浮点运算,但不提供广泛的格式化功能。 (此printf实用程序实际上不能用于格式化bc输出;它不支持任意精度。)鼓励实现支持将浮点转换作为扩展。
因此:%f
甚至不需要存在;任何它可能做或不做的事情都完全没有被相关标准规定。
同样,对printf()
函数的POSIX标准提供的舍入没有指导:
f,F
双参数应转换为“[ - ] ddd.ddd”样式的十进制表示法,其中基数字符后面的位数等于精度规格。如果缺少精度,则应视为6;如果精度明确为零且没有'#'标志,则不会出现基数字符。如果出现基数字符,则在其前面至少出现一个数字。 低位数字应以实现定义的方式舍入。
表示无穷大的双参数应以“[ - ] inf”或“[ - ] infinity”之一转换;哪种样式是实现定义的。表示NaN的双参数应以“[ - ] nan(n-char-sequence)”或“[ - ] nan”的样式之一进行转换;哪种样式,以及任何n-char序列的含义,都是实现定义的。 F转换说明符分别产生“INF”,“INFINITY”或“NAN”而不是“inf”,“infinity”或“nan”。