float와 bc를 비교할 때 구문 오류가 발생합니다.

float와 bc를 비교할 때 구문 오류가 발생합니다.

비교 연산자를 사용하려고 하는데 bc"라인 1 stdin의 구문 오류" 오류가 발생합니다. korn은 부동 소수점을 잘 처리하지 못하기 때문에 korn 스크립트에서 비교 기능을 사용해야 합니다. 사용 예는 다음과 같습니다.

echo "scale=2; 3.2 > 3" | bc

답변1

bc당신이 하는 일은 POSIX와 호환 되어야 합니다 . 그러나 bc는 상대적으로 거의 사용되지 않는 도구이며 일부 구현에는 버그가 있을 수 있습니다. 합계 비교보다 더 고급 수학 함수를 사용하지 않는 경우에는 A, W 및 K의 원래 구현에서도 부동 소수점 연산을 지원할 +-*/수 있습니다 .awk

echo 3.2 | awk '{exit !($0 > 3)}'

답변2

expr은 이와 같은 부동 소수점 비교를 처리할 수 있습니다.

ksh -c '(( $(expr 3.2 \> 3) == 1 )) && echo 1 || echo 0'

또는 다음과 같은 스크립트에서 사용하십시오.

#!/usr/bin/ksh

if [ $(expr $1 \> $2) == 1 ]; then
    echo "greater"
else 
    echo "lesser"  
fi

위에서 사용한 bc 라인은 Linux에서는 작동하지만 Solaris에서는 작동하지 않으므로 expr의 이식성이 더 뛰어날 수 있습니다. expr을 사용하면 두 운영 체제 모두에서 동일하게 작동합니다.

답변3

가능하다면 시도해 보세요.dc:

echo "2 k 3.2 3 [1p] sa <a" | dc

위의 코드에서는 첫 번째 숫자(위 예에서는 3.2)가 두 번째 숫자(위의 3.2)보다 큰 경우 2 소수점 정밀도를 사용하고 1을 출력합니다. 그러나 그렇지 않으면 아무것도 출력되지 않습니다.

dcbc, GNU 문서에는 "임의의 정밀도 계산기"라는 같은 단어로 설명되어 있습니다. 일부 배포판에서는 동일한 패키지로 제공되지만 다른 배포판에서는 별도로 패키지되어 제공됩니다.

관련 정보