如何在bash中将浮点数四舍五入到小数点后3位

问题描述 投票:0回答:4

我是一名新的

bash
学习者。我想打印作为输入给出的表达式的结果,小数点后有
3 digits
,并根据需要进行四舍五入。 我可以使用以下代码,但它不会四舍五入。假设我将
5+50*3/20 + (19*2)/7
作为以下代码的输入,则给定的输出为
17.928
。实际结果是
17.92857...
。所以,它是截断而不是舍入。我想对其进行四舍五入,这意味着 输出应该是
17.929
。我的代码:

read a
echo "scale = 3; $a" | bc -l

等效的

C++
代码可以是(在
main
函数中):

float a = 5+50*3.0/20.0 + (19*2.0)/7.0;
cout<<setprecision(3)<<fixed<<a<<endl;
bash floating-point floating-point-precision floating-point-conversion
4个回答
10
投票

那又如何

a=`echo "5+50*3/20 + (19*2)/7" | bc -l`
a_rounded=`printf "%.3f" $a`
echo "a         = $a"
echo "a_rounded = $a_rounded"

输出

a         = 17.92857142857142857142
a_rounded = 17.929


3
投票

尝试使用这个: 这里 bc 将为 bash 提供计算器的功能,而 -l 将读取字符串中的每一个,最后我们在末尾仅打印三位小数

read num
echo $num | bc -l | xargs printf "%.3f"

2
投票

您可以使用awk:

awk 'BEGIN{printf "%.3f\n", (5+50*3/20 + (19*2)/7)}'
17.929

%.3f
输出格式会将数字四舍五入到小数点后 3 位。


0
投票

我认为有两个简单的解决方案:

read input 
var=$(echo "scale=4; $input" | bc) 
printf "%.3f\n" "$var"

第二个更简单:

printf "%.3f" $(cat - |bc -l)

哪里

cat - 从输入中读取数值。

| 将输入传送到下一个命令。

bc -l 执行所需的计算。

(...) 捕获输出。

printf "%.3f" 将捕获的输出格式化并打印为具有三位小数的浮点数。

© www.soinside.com 2019 - 2024. All rights reserved.