coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: numfmt (=print 'human' sizes) updates


From: Pádraig Brady
Subject: Re: numfmt (=print 'human' sizes) updates
Date: Mon, 04 Feb 2013 03:01:46 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1

On 02/01/2013 10:25 PM, Assaf Gordon wrote:
Hello Pádraig,

Thanks for carrying this through - I think it's becoming a nice little 
addition...

Couple of small issues:

     numfmt: Don't process fields in command args by default

Ok I dropped this due to the inconsistency, but made it easier to
process the whole argument with -d '' (like cut).

Last, accepting white-space but not emitting them might affect auto-padding (I 
did not check it thoroughly, though):
     $ ./src/numfmt --from=si --to=iec "45K"
     44K
     $ ./src/numfmt --from=si --to=iec "45 K"
     44K
     $ ./src/numfmt --from=si --to=iec "45  K"
     44K
     $ ./src/numfmt --from=si --to=iec "45   K"
     44K

Auto padding is only enabled with isblank() delimiters,
which excludes this case.


     numfmt: support negative numbers

But this also introduces a tiny bug due to my (limited) rounding functions:

     $ ./src/numfmt --from=si -- -9K
     -9000
     $ ./src/numfmt --from=si -- -9.1K
     -8900
     $ ./src/numfmt --from=si -- -9.2K
     -8800

And also:
     $ ./src/numfmt --to=iec -- 90000
     88K
     $ ./src/numfmt --to=iec -- -90000
     -90000

Yes good point. I fixed up the negative handling
and also reworked the rounding functionality a bit.

The new patch set at:
http://www.pixelbeat.org/patches/coreutils/numfmt.15.patch.xz
adds these:


    numfmt: add more TODO notes


    numfmt: apply rounding for all numbers

    This is significant when scaling with --to-unit for example.
    Without this we're left with printf's nearest rounding.

    * src/numfmt.c (double_to_human): Apply rounding to all numbers.
    * tests/misc/numfmt.pl: Add tests for all rounding combinations.


    numfmt: use more abstract names for the rounding methods

    Also add the "towards-zero" method which is equivalent to trunc().


    numfmt: increase width of rounding functions from int to intmax_t


    numfmt: fix negative number support

    * src/numfmt.c (simple_round_from_zero): A new function equivalent
    to ceil() for positive numbers, but symmetrically rounds away from
    zero for negative numbers.  Set this as the default rounding method.
    (absld): A new function to get the absolute value of a long double,
    without the need for libm.  Use this throughout when comparing
    the magnitude of floating point values.
    * tests/misc/numfmt.pl: Add new tests for negative number formats,
    and rounding issues.


    numfmt: handle an empty initial field

    -d: --field=2 ':2:3' should operate on "2"

    * src/numfmt.c (skip_fields): Account for an empty initial field.
    * tests/misc/numfmt.pl: Add a test.


    numfmt: allow specifying -d '' to process the whole line

    * src/numfmt.c (main): Allow the NUL delimiter which is easy
    to specify in all shells.
    * tests/misc/numfmt.pl: Adjust accordingly.

thanks,
Pádraig.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]