bash 脚本中的小数值变为全零
Decimal values in bash script becoming all zeros
这是我的第一个 bash 脚本,运行 遇到了设置小数精度的小问题。我的任务是创建一个 bash 脚本来计算直径为 20 的圆的面积和周长。这就是我目前拥有的
#!/bin/bash
clear
diameter= # storing first argument
radius=$(echo "scale=5;$diameter / 2" | bc) # setting radius
# echo "$radius"
# calculate area of a circle
area=$(echo "scale=5;3.14 * ($radius * $radius)" | bc -l) # A = pi(r^2)
# calculate circumference of a circle
circum=$(echo "scale=5;2 * 3.14 * ($radius)" | bc -l) # C = 2(pi)(r)
echo "Circumference: $circum"
echo "Area: $area"
当我 运行 脚本打印出来时
Circumference: 62.80000
Area: 314.00000
应该打印出来
Circumference: 62.83185
Area: 314.15926
我不明白为什么它没有显示正确的十进制值。我已经让 scale=5
显示它正在做的五位小数。我很困惑为什么出现零而不是真正的十进制值。任何帮助或建议将不胜感激。
如果 pi 等于 3.14,那么您的代码给出了准确的结果。
要在 bc
代码中获取 pi 的精确值,请使用 4*a(1)
:
# calculate area of a circle
area=$(echo "scale=5;4*a(1) * ($radius * $radius)" | bc -l) # A = pi(r^2)
# calculate circumference of a circle
circum=$(echo "scale=5;2 * 4*a(1) * ($radius)" | bc -l) # C = 2(pi)(r)
(这是有效的,因为 a(1)
是 1 的反正切,即 pi/4。)
经过这些更改,样本 运行 看起来像:
$ bash circ.sh 20
Circumference: 62.83120
Area: 314.15600
现在精度有限是因为选择了scale=5
。
精度更高
下面的代码在打印之前保持最佳精度,然后以您想要的精度打印:
#!/bin/bash
diameter= # storing first argument
radius=$(echo "$diameter/2" | bc -l) # setting radius
# calculate area of a circle
area=$(echo "4*a(1)*$radius^2" | bc -l) # A = pi(r^2)
# calculate circumference of a circle
circum=$(echo "2 * 4*a(1) * $radius" | bc -l) # C = 2(pi)(r)
printf "Circumference: %.5f\n" "$circum"
printf "Area: %.5f\n" "$area"
示例:
$ bash circ.sh 20
Circumference: 62.83185
Area: 314.15927
这是我的第一个 bash 脚本,运行 遇到了设置小数精度的小问题。我的任务是创建一个 bash 脚本来计算直径为 20 的圆的面积和周长。这就是我目前拥有的
#!/bin/bash
clear
diameter= # storing first argument
radius=$(echo "scale=5;$diameter / 2" | bc) # setting radius
# echo "$radius"
# calculate area of a circle
area=$(echo "scale=5;3.14 * ($radius * $radius)" | bc -l) # A = pi(r^2)
# calculate circumference of a circle
circum=$(echo "scale=5;2 * 3.14 * ($radius)" | bc -l) # C = 2(pi)(r)
echo "Circumference: $circum"
echo "Area: $area"
当我 运行 脚本打印出来时
Circumference: 62.80000
Area: 314.00000
应该打印出来
Circumference: 62.83185
Area: 314.15926
我不明白为什么它没有显示正确的十进制值。我已经让 scale=5
显示它正在做的五位小数。我很困惑为什么出现零而不是真正的十进制值。任何帮助或建议将不胜感激。
如果 pi 等于 3.14,那么您的代码给出了准确的结果。
要在 bc
代码中获取 pi 的精确值,请使用 4*a(1)
:
# calculate area of a circle
area=$(echo "scale=5;4*a(1) * ($radius * $radius)" | bc -l) # A = pi(r^2)
# calculate circumference of a circle
circum=$(echo "scale=5;2 * 4*a(1) * ($radius)" | bc -l) # C = 2(pi)(r)
(这是有效的,因为 a(1)
是 1 的反正切,即 pi/4。)
经过这些更改,样本 运行 看起来像:
$ bash circ.sh 20
Circumference: 62.83120
Area: 314.15600
现在精度有限是因为选择了scale=5
。
精度更高
下面的代码在打印之前保持最佳精度,然后以您想要的精度打印:
#!/bin/bash
diameter= # storing first argument
radius=$(echo "$diameter/2" | bc -l) # setting radius
# calculate area of a circle
area=$(echo "4*a(1)*$radius^2" | bc -l) # A = pi(r^2)
# calculate circumference of a circle
circum=$(echo "2 * 4*a(1) * $radius" | bc -l) # C = 2(pi)(r)
printf "Circumference: %.5f\n" "$circum"
printf "Area: %.5f\n" "$area"
示例:
$ bash circ.sh 20
Circumference: 62.83185
Area: 314.15927