Как переместить десятичную точку в ударе

У меня есть переменная, которая хранится как "1.20E20". Я хотел бы за него быть измененным на "0.0120E22". Существует ли простая команда для изменения этого значения? Я попробовал

let nh=$nh/100

Но это не работало; я предполагаю, что это из-за символьного значения в переменной. Я знаю, что существуют различные решения; что лучший способ состоит в том, чтобы решить это?

3
задан 6 June 2018 в 21:16

2 ответа

Я не знаю о способе вызвать 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
6
ответ дан 1 December 2019 в 13:15

Я записал бы простое 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
2
ответ дан 1 December 2019 в 13:15

Другие вопросы по тегам:

Похожие вопросы: