dfc
为什么和之间使用的尺寸存在差异df -h
?
$ df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda7 64G 51G 11G 83% /
none 4,0K 0 4,0K 0% /sys/fs/cgroup
udev 3,9G 4,0K 3,9G 1% /dev
tmpfs 801M 1,5M 799M 1% /run
none 5,0M 0 5,0M 0% /run/lock
none 4,0G 148K 4,0G 1% /run/shm
...
$ dfc
FILESYSTEM (=) USED FREE (-) %USED AVAILABLE TOTAL MOUNTED ON
/dev/sda7 [=================---] 83% 10.6G 63.9G /
none [--------------------] 0% 4.0K 4.0K /sys/fs/cgroup
udev [=-------------------] 0% 3.9G 3.9G /dev
tmpfs [=-------------------] 0% 798.7M 800.1M /run
none [--------------------] 0% 5.0M 5.0M /run/lock
none [=-------------------] 0% 3.9G 3.9G /run/shm
...
我不会将 3.9 舍入为 4,然后显示 4,0,这对我来说毫无意义。
答案1
这不仅仅是“四舍五入”。 dfc
(和di
)打印四舍五入到最接近的数字表示的值,而df
四舍五入向上。
该问题没有指定 coreutils 的版本;我是根据版本 8.13(在 Debian 7 中)回答的,尽管我在 8.25 中看到了相同的结果。
从-h
选项在df.c
:
case 'h':
human_output_opts = human_autoscale | human_SI | human_base_1024;
output_block_size = 1;
break;
gnulib 的“human.c”中有后续代码(驼峰),它决定使用哪种类型的舍入。因为人类选项没有被修改,所以它使用天花板而不是地面或者四舍五入到最接近的值。那是因为零恰好是枚举值对于天花板:
/* Unless otherwise specified these options may be ORed together. */
/* The following three options are mutually exclusive. */
/* Round to plus infinity (default). */
human_ceiling = 0,
/* Round to nearest, ties to even. */
human_round_to_nearest = 1,
/* Round to minus infinity. */
human_floor = 2,
答案2
我相信这被称为“四舍五入”。