Аппроксимация числа с плавающей точкой с правильным округлением

Можно использовать этот небольшой сценарий удара.

#!/bin/bash

find . -type f -exec sh -c  '
    dn=`dirname "$1"`
    bn=`basename "$1"`
    fn=`echo "${bn%.*}"`
    ext=`echo "${bn##*.}"`
    FN=`echo "${fn^^}"`
    newfn="${FN}"."${ext}"
    #echo ${dn}/$newfn
    if [ "${fn}" = "${FN}" ] ;then : ;else echo "${bn} renamed to ${newfn}";mv "$1" "${dn}/${newfn}";fi
' _ {} \;
3
27.06.2015, 01:06
1 ответ

Используйте printf :

$ printf "%.4f\n" "$A"
1.2346
$ printf "%.4f\n" "$B"
0.0000
$ printf "%.4e\n" "$B"
1.2346e-05
$ printf "%.14f\n" "$B"
0.00001234567800
$ printf "%.4g\n" "$B"
1.235e-05
$ printf "%.4g\n" "$A"
1.235

Поскольку % e может изменить показатель степени, чтобы быть уверенным, что он останется неизменным, вы можете использовать строковые манипуляции оболочки , чтобы отделить число от экспоненты и распечатать каждую по отдельности:

$ B=100.12345678E-05  
$ printf '%.5fE%s\n' "${B%E*}" "${B##*E}"
100.12346E-05

$ {B% E *} печатает все до 1-го E и $ { B ## * E} - все после первого E .

8
27.01.2020, 21:11

Теги

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