У меня есть переменная, которая хранится как "1.20E20". Я хотел бы за него быть измененным на "0.0120E22". Существует ли простая команда для изменения этого значения? Я попробовал
let nh=$nh/100
Но это не работало; я предполагаю, что это из-за символьного значения в переменной. Я знаю, что существуют различные решения; что лучший способ состоит в том, чтобы решить это?
Я не знаю о способе вызвать 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
Я записал бы простое 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