使用bash printf减少小数位数,而不进行舍入

时间:2017-07-08 22:31:35

标签: bash floating-point printf

我使用printf将数字的小数位数限制为3位小数

printf "%.3f\n" 8.577772
8.578

我想将此数字截断为3位小数而不进行四舍五入,以便打印为8.577。

首选printf解决方案。

2 个答案:

答案 0 :(得分:3)

假设这是一个变量,它可以在小数之前有任意数量的位置:

$ var=8.577772
$ printf "%s.%.3s\n" $( echo $var | tr '.' ' ' )
8.577

$ var=134.56789
$ printf "%s.%.3s\n" $( echo $var | tr '.' ' ' )
134.567

答案 1 :(得分:1)

我认为限制舍入是不可能的,因为printf使用IEEE 754作为其内部表示。 请改用regexp:

echo "34234.23423423" | grep -oE '[0-9]*\.[0-9]{3}'