如何打印浮点数小数点后前三位数字?

如何打印浮点数小数点后前三位数字?

我是 BASH 的新手,了解到 printf 和 echo 都会写入标准输出。但是,我通过以下示例了解了这一点,该示例从输入中读取表达式并计算结果,精确到小数点后 3 位:

read exp
printf "%.3f\n" "$(echo $exp | bc -l)"

我不明白为什么 echo 会作为语句中的参数传递到这里printf。还有其他方法可以仅使用 来表示语句吗echo

答案1

之后read exp,您可以echo按如下方式使用:

$ echo "scale=3; $exp/1" | bc
9.456

但请注意,此命令不需要echo

$ bc <<< "scale=3; $exp/1"
9.456

编辑:为了获得四舍五入的结果,您必须使用printf内置的 bash,因为bc无法对值进行四舍五入。

以下命令按预期工作:

 echo "scale=4; $exp" | bc | xargs printf "%.3f\n"

答案2

这是一个仅使用的解决方案echo

  • .如果你在有理数中使用小数点 ( ):

    $ read exp
    123.4567
    $ int=${exp%%.*}
    $ rat=${exp##*.}
    $ echo $int.${rat:0:3}
    123.456
    
  • ,如果你在有理数中使用小数逗号( )(就像我和欧洲大陆大部分地区使用的那样):

    $ read exp
    123,4567
    $ int=${exp%%,*}
    $ rat=${exp##*,}
    $ echo $int,${rat:0:3}
    123,456
    

有关详细信息,请参阅高级 Bash 脚本指南:操作字符串

相关内容