gpt4 book ai didi

bash - 在 bash 中将科学计数法转换为十进制

转载 作者:行者123 更新时间:2023-11-29 08:59:54 28 4
gpt4 key购买 nike

我想将以科学记数法存储的数字转换为浮点小数,以便对数据进行一些比较。这是在 bash 脚本中完成的——这里是一小段代码:

while read track_id landfall_num gate_id pres_inter
do
if [[ $landfall_num == 0001 ]]
then
start_flag = true
echo DING DING $start_flag
if [[ $pres_inter < 97000 ]]
then
echo Strong Storm From North $track_id, $gate_id, $pres_inter
fi
fi
done < $file

我的问题是我的 <当我使用 < 时,操作数基本上选择了所有以科学计数法存储的压力值。 , 当我使用 > 时没有.我正在查看以帕斯卡而不是毫巴为单位的大气压力测量值。

这是示例输出:

Strong Storm From North 0039988 0017 1.0074E+05

Strong Storm From North 0037481 0018 9.9831E+04

这些 Storm 都不应该符合选择标准!

最佳答案

首先,bash 不能使用浮点运算进行运算。第二,bash 不知道科学记数法(即使是整数)。

如果您完全确定所有数字都是整数,您可以尝试的第一件事是:将它们转换为十进制表示法:printf 会很乐意为您做这件事:

printf -v pres_inter "%.f" "$pres_inter"

(%.f 四舍五入到最接近的整数)。

然后使用 bash 的算法:

if (( pres_inter < 97000 )); then ....

这个解决方案很棒,不使用任何外部命令或任何子 shell:速度和效率!

现在,如果你正在处理非整数,你最好使用 bc 来做算术:但是因为 bc 是迟钝的并且不能很好地处理科学计数法,无论如何你都必须将你的数字转换为十进制计数法。所以像下面这样的事情应该做:

printf -v pres_inter "%f" "$pres_inter"
if (( $(bc -l <<< "$pres_inter<97000") )); then ...

当然,这会比较慢,因为您要 fork bc。如果您对整数感到满意,请坚持我给出的第一种可能性。

完成!

关于bash - 在 bash 中将科学计数法转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826237/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com