de man 3 printf
, Souligné par l'auteur:
e, E
Le double argument est arrondi, et dans le style [-]d.ddde±dd
où il y a un chiffre avant le caractère décimal point et le nombre de chiffres après il est égal à la précision; si la précision est manquante, elle est prise comme 6; si la précision est zéro, aucun caractère point décimal n'apparaît. Une conversion E utilise la lettre E (plutôt que e) pour introduire l'exposant. L'exposant contient toujours au moins deux chiffres; si la valeur est zéro, l'exposant est 00.
Si vous voulez que la mantisse soit entre 0 et 1, vous devrez créer votre propre formateur. Voici un exemple dans awk
. Poignées 0 et négatifs:
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;
}'
}
utilisation comme:
sn $(printf "%4.2E" -0.024)
j'ai essayé ma réponse avec 3180, et il fonctionne presque raisonnablement. _Votre réponse ci-dessus aurait dû être affichée en tant que commentaire, pas en tant que réponse_. – linuxfan