От man 3 printf
, курсив мой:
e, E
Двойной аргумент округляется и преобразуется в стиле [-]d.ddde±dd
где есть одна цифра перед символом десятичной точки и количеством цифр после нее равна точности; если точность отсутствует, она принимается равной 6; если точность равна нулю, символ десятичной точки не появляется. Преобразование E использует букву E (а не e), чтобы ввести показатель степени. Показатель всегда содержит не менее двух цифр; если значение равно нулю, показатель равен 00.
Если вы хотите мантиссы от 0 до 1, вам нужно будет создать собственный форматировщик. Вот пример в awk
. Ручки 0 и негативы:
function sn() {
awk -vn=$1 'BEGIN {
split(n,a,"E");
if (0 < a[1]) { m=a[1]/10; e=a[2]+1; p=length(a[1])-1; }
else if (a[1] < 0) { m=a[1]/10; e=a[2]+1; p=length(a[1])-2; }
else { m=0; e=0; p=length(a[1])-2; }
printf "%0.*fE%+03d", p, m, e;
}'
}
Используйте как:
sn $(printf "%4.2E" -0.024)
Я попробовал мой ответ с 3180, и он работает почти разумно. Ваш ответ выше здесь должен быть опубликован как комментарий, а не как ответ. – linuxfan