How to display number to two decimal places in bash function

前端 未结 4 1465
南方客
南方客 2021-02-20 16:27

How should I take a number that is in hundreths of seconds and display it in seconds to two decimal places? Psuedo code to follow the dTime function I am not sure about but you\

相关标签:
4条回答
  • 2021-02-20 16:35

    Bash has a printf function built in:

    printf "%0.2f\n" $T
    
    0 讨论(0)
  • 2021-02-20 16:42

    Below can be done for 2 decimal precision ,

    echo $T | bc -l | xargs printf "%.2f"
    
    0 讨论(0)
  • 2021-02-20 16:42

    "bc" and "dc" both truncate rather than round, so nowadays I prefer Perl

    If "N" has your number of hundreths of seconds in it then:

    $ perl -e "printf('%.2f', $N/100)"
    

    I was never a Perl supporter but it is now ubiquitous and I have finally been swayed to using it instead of sed/awk etc.

    0 讨论(0)
  • 2021-02-20 17:01

    The following divides the output of date +%N by 1000000000, rounds the result to two decimal places and assigns the result to the variable T.

    printf -v T "%.2f" $(bc -l <<< "$(date +%N)/1000000000")
    

    If you just want to print the stuff,

    bc <<< "scale=2; $(date +%N)/1000000000"
    

    If you don't like bc and want to use dc (which is a bit lighter and much funnier to use as it's reverse polish),

    dc <<< "2 k $(date +%N) 1000000000 / p"
    

    Notice the difference, with printf you'll have the leading 0, not with bc and dc. There's another difference between printf and bc (or dc): printf rounds to the nearest number to two decimal places, whereas bc (or dc) rounds correct to two decimal places. If you want this latter behavior and assign to a variable T the result, you can use, e.g.,

    T=$(dc <<< "2 k $(date +%N) 1000000000 / p")
    

    or, if you also want the leading 0:

    T=0.$(dc <<< "2 k $(date +%N) 1000000000 / p")
    
    0 讨论(0)
提交回复
热议问题