使用 printf 将 49.765 舍入为 49.77?

使用 printf 将 49.765 舍入为 49.77?

49.765 是我的一系列命令的输出。我想使用 print f 将其舍入两位小数为 49.77。

它的代码是什么?

答案1

$ x=49.765
$ printf "%.2f" $(echo "$x + 0.005" | bc)

您必须使用外部命令,因为 中没有内置舍入功能printf(1),并且 POSIX shell 没有内置浮点运算。

要四舍五入到最接近的小数位,请添加 0.5 并截断。要四舍五入到最接近的十分之一,请将“微移因子”除以 10,依此类推。

缺乏内置设施常常促使人们使用 Perl 之类的东西而不是 shell:

$ perl -e 'printf "%.2f", 49.765 + 0.005'

同样的事情,但全部由一个进程处理。

答案2

您可以使用以下命令进行四舍五入。

浮点数 = 49.765; printf("%0.2f", 数字);

您应该能够得到小数点后 2 位数字。

但这只会打印,不会更新值。如果您想更改变量的值,那么您应该使用下面的方法。

#include <math.h>

float val = 49.765;

float rounded_down = floorf(val * 100) / 100;   /* Result: 49.76 */
float nearest = roundf(val * 100) / 100;  /* Result: 49.77 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 49.77 */

请注意,您可能需要选择三种不同的舍入规则:向下舍入(即在两位小数后截断)、四舍五入到最接近的舍入和向上舍入。通常,您需要四舍五入到最接近的值。

正如其他几个人指出的那样,由于浮点表示的怪癖,这些舍入值可能不完全是“明显的”十进制值,但它们将非常非常接近。

答案3

捕获变量中“命令环”的输出并使用printf.

$ x=49.765

$ printf '%.2f\n' "$x"
49.76

舍入是通过数字的二进制表示形式按照“舍入到最接近的偶数”规则完成的。请理解,在大多数情况下,二进制表示并不完全等于给定的数字。

相关内容