Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带小数点的bash和bc数学计算_Bash_Math_Decimal Point_Bc - Fatal编程技术网

带小数点的bash和bc数学计算

带小数点的bash和bc数学计算,bash,math,decimal-point,bc,Bash,Math,Decimal Point,Bc,我试图在Bash脚本中使用“bc”实现以下计算,但是“scale”选项产生了一个错误的结果,结果末尾有两个额外的零,这意味着我必须手动修剪它(丑陋) 计算: ((2592000-239)÷2592000)×100 预期结果:99090779321(但我只想显示小数点后2位) 在Bash中: echo "scale=2; ((2592000-239)/2592000)*100" | bc 99.00 echo "scale=3; ((2592000-239)/2592000)*100" | b

我试图在Bash脚本中使用“bc”实现以下计算,但是“scale”选项产生了一个错误的结果,结果末尾有两个额外的零,这意味着我必须手动修剪它(丑陋)

计算:

((2592000-239)÷2592000)×100

预期结果:99090779321(但我只想显示小数点后2位)

在Bash中:

echo "scale=2; ((2592000-239)/2592000)*100" | bc

99.00

echo "scale=3; ((2592000-239)/2592000)*100" | bc

99.900

echo "scale=4; ((2592000-239)/2592000)*100" | bc

99.9900

echo "scale=5; ((2592000-239)/2592000)*100" | bc

99.99000

echo "scale=8; ((2592000-239)/2592000)*100" | bc

echo "scale=8; ((2592000-239)/2592000)*100" | bc

99.99077900

echo "scale=10; ((2592000-239)/2592000)*100" | bc

99.9907793200
根据手册页:

数字 bc中最基本的元素是数字。数字是任意精度的数字。此精度为整数和整数 部分和小数部分。所有数字都有代表性 内部为十进制,所有计算均以十进制完成。(此版本截断除法和乘法运算的结果。) 数字有两个属性,长度 还有天平。长度是数字中有效小数位数的总数,小数位数是数字的总数 小数点后的小数位数。例如: .000001的长度为6,刻度为6。 1935.000的长度为7,比例尺为3

我理解正确吗?

您可以使用:

echo 'scale=2; 100*(2592000-239)/2592000' | bc -l

99.99
你得到的是
99.00
,因为你先除法得到
.99
,当它乘以
100
时,它变成
99.00
(由于
scale-2

,你可以使用:

echo 'scale=2; 100*(2592000-239)/2592000' | bc -l

99.99

你得到的是
99.00
,因为你先除法得到的是
.99
,当它乘以
100
时,它变成
99.00
(由于
scale-2

,如果你不想检查你的
bc
语句是否有正确的数学运算顺序,(刻度用于除法)只需使用默认精度a格式计算
bc
bash
中的输出,如下所示:

printf "%.2f\n" $( bc -l <<< '((2592000-239)/2592000)*100' )
# 99.99

printf“%.2f\n”$(bc-l如果不想检查
bc
语句的正确数学运算顺序,(刻度用于除法),只需使用默认精度a格式计算
bc
,如:

printf "%.2f\n" $( bc -l <<< '((2592000-239)/2592000)*100' )
# 99.99
printf“%.2f\n”$(bc-l