【问题标题】:Decimal values in bash script becoming all zerosbash脚本中的十进制值全为零
【发布时间】:2016-09-17 07:11:01
【问题描述】:

这是我的第一个 bash 脚本,在设置小数精度时遇到了一点问题。我的任务是创建一个 bash 脚本,计算给定直径 20 的圆的面积和周长。这就是我目前拥有的

#!/bin/bash

clear
diameter=$1 # 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 显示它正在执行的五个小数位。我很困惑为什么会出现零而不是真正的十进制值。任何帮助或建议将不胜感激。

【问题讨论】:

标签: linux bash bc


【解决方案1】:

如果 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=$1 # 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

【讨论】:

  • 谢谢@John1024,我什至没有想到我代表pi错了。
猜你喜欢
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多