올바른 반올림을 사용한 대략적인 부동 소수점 수

올바른 반올림을 사용한 대략적인 부동 소수점 수

쉘 스크립트를 사용하여 부동 소수점 숫자(예: 소수점 이하 최대 4자리)의 대략적인 값을 계산하려면 어떻게 해야 합니까? 두 가지 예가 있습니다.

A=1.2345678그리고 B=1.2345678E-05.

A=1.2346그래서 나는 and 을 얻고 싶습니다 B=1.2346E-05.

A다음을 사용하여 작업을 빠르게 완료할 수 있습니다 cut.

A=`echo $A | cut -c1-6`

하지만 이렇게 하면 A=1.2345마지막 숫자가 반올림될 것으로 예상됩니다 6(다음 숫자가 5보다 크므로). 그리고 소수점 앞의 한 자리에서만 작동합니다. (대략적으로 계산하고 싶다면 어떻게 해야 할까요?) 마찬가지 100.2345678입니다.B

답변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*}첫 번째 항목 이전의 모든 항목 E${B##*E}첫 번째 항목 이후의 모든 항목을 인쇄합니다 E.

관련 정보