Não é simplesmente "arredondamento". dfc
(e di
) imprime o valor arredondado para a representação mais próxima em dígitos, enquanto df
arredonda para cima .
A pergunta não especifica uma versão do coreutils; Eu estou respondendo baseado na versão 8.13 (no Debian 7), embora eu veja o mesmo resultado com 8.25.
Comece com a -h
opção em df.c
:
case 'h':
human_output_opts = human_autoscale | human_SI | human_base_1024;
output_block_size = 1;
break;
Existe um código de acompanhamento no "human.c" do gnulib ( humblock ), onde decide qual tipo de arredondamento usar. Como as opções humanas não são modificadas, ele usa o teto em vez de andar ou arredondamento para o valor mais próximo. Isso acontece porque um zero é o valor de enumeração do teto:
/* 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,