과학 표기법에서 두 숫자를 포함하는 if else 문

과학 표기법에서 두 숫자를 포함하는 if else 문

과학적 표기법으로 된 두 개의 숫자가 있고 bash의 if 문에서 두 숫자를 비교하고 싶습니다. 이렇게 하면 bwlow와 같은 오류가 발생합니다. 예를 들면 다음과 같습니다.

bash-4.2$ a=10e-12
bash-4.2$ b=12e-12
bash-4.2$ if (( a > b )); then r=1; else r=0; fi
bash: ((: 10e: value too great for base (error token is "10e")

a와 b가 정수이면 같은 문제가 발생하지 않습니다. 위의 설명을 사용하면 부동 소수점 숫자에 문제가 있는 것으로 보입니다. if 문에서 비교를 수행하는 쉬운 방법이 있습니까?

답변1

"익"을 사용하세요

@Theophrastus가 위에서 지적했듯이 과학적 표기법 은 지원되지 bash도 않습니다 .bc

간단한 비교 및 ​​계산을 위해 다음을 사용하는 것이 좋습니다 awk(xEy 숫자를 처리합니다).

a=10e-12
b=12e-12

r=$(awk 'BEGIN{print ('$a'>'$b')?1:0}')
echo $r

더 복잡한 표현식의 경우 awk변수를 with 에 전달하여 번거로운 인용 처리 및 이스케이프를 피할 수 있습니다 -v. 이는 실제로 선호되는 접근 방식입니다.

r=$(awk -v a="$a" -v b="$b" 'BEGIN{print (a<b)?1:0}')

"bc"를 사용하세요

기호를 대체 형식으로 다시 포맷하는 방법에는 여러 가지가 있습니다.x * 10^y이것은 이해할 수 있지만 bc(또는 직접 할 수 있음) bc음수 지수에 관해서는 몇 가지 특징이 있습니다(귀하의 예에서와 같이):

$ bc
10^12
1000000000000
10^-12
0

관련 정보