大浮点数的bc计算

时间:2018-11-22 14:32:36

标签: bash calculation bc

我的人数很多,我想进行公元前的计算。 示例:

T_Mab = 6.00899e+09

我想这样打印:

echo 'T_Mab =   '${T_Mab}' [s] = '${T_Mab}/31557600' [year]' | bc -l

它给我“语法错误”。那我该怎么办呢?

2 个答案:

答案 0 :(得分:1)

您不能只编写要显示的内容并将其转储到bc。另一个问题是bc不接受科学计数法。查看[How to get bc to handle numbers in scientific (aka exponential) notation?了解详情。

假设该数字已经按照链接问题中的答案转换为正确的格式,则可以在bash中这样写。

T_Mab=6008990000
echo "${T_Mab} [s] = $(bc -l <<< ${T_Mab}/31557600) [year]"

bash 3.0开始添加了字符串,如果您使用的是旧版本,则只需使用$(echo ${T_Mab}/31557600|bc -l)

说了这么多,如果不需要任意精度,您确实应该考虑链接问题第二个答案中建议的bc替代方案。

答案 1 :(得分:0)

语法错误是因为bc不读“ e”表示法,并且可以通过一个大大简化的示例来复制它:

$ bc -l <<<"6.00899e+09"
(standard_in) 1: syntax error

我们需要更改为它确实理解的语法;我们可以在Bash中做到这一点:

v=6.00899e+09
v=${v/e/*10^}    # 6.00899*10^+09
v=${v/^+/^}      # 6.00899*10^09
bc -l <<<"($v)"
6008990000.00000

或者只是通过可以理解该符号的工具进行清洗:

printf '%f\n' "$v" | bc -l