如何在 bash 中移动小数点

如何在 bash 中移动小数点

我有一个变量存储为“1.20E20”。我想将其更改为“0.0120E22”。有没有简单的命令可以更改此值?我试过了

let nh=$nh/100

但那没有用;我认为这是因为变量中的字符值。我知道有多种解决方案;解决这个问题的最佳方法是什么?

答案1

我不知道如何强制printf移动指数。我们手动操作吧:将系数乘以 10 -2,然后将 2 加到指数上。

n=1.20E20
m=2
IFS="E" read coeff exp <<<"$n"
new=$(printf "%.4fE%d\n" "$(echo "$coeff * 10^-($m)" | bc -l)" "$((exp+m))")
# => 0.0120E22

我们可以通过以下方式验证:

$ printf "%e\n" "$new"
1.200000e+20

答案2

我会编写一个bash像这样的简单脚本:

#!/bin/bash
a=${1%E*}
b=${1#*E}
echo 0$(<<<"scale=4;$a/10^$2" bc)E$((b+$2))

您只需要将值作为参数传递给它,首先是数字,然后是移位:

$ bash /path/to/script 1.20E20 2
0.0120E22
  # or, as a oneliner:
$ bash -c 'echo 0$(<<<"scale=4;${1%E*}/10^$2" bc)E$((${1#*E}+$2))' _ 1.20E20 2
0.0120E22

相关内容