Unix 명령은 뺄셈 후 가장 큰 부동 소수점 값 2를 반환합니다.

Unix 명령은 뺄셈 후 가장 큰 부동 소수점 값 2를 반환합니다.

이는 다음과 유사합니다.두 숫자의 최소/최대값을 구하는 질문입니다., 하지만 부동 소수점 숫자를 사용하여 동일한 작업을 수행하는 데 관심이 있습니다.

그래서 기본적으로 사용하고 싶습니다쉘 산술 확장삼항 연산자를 사용하지만 정수에서만 작동합니다.

예를 들어, 두 숫자에서 일부를 뺀 다음 결과가 0보다 큰지 확인하고, 그렇지 않은 경우 0보다 크게 설정하고 싶습니다.

정수

이것은 훌륭하게 작동합니다:

value=5
echo $(( $(bc <<< "$value - 10") > 0 ? $(bc <<< "$value - 10") : 1 ))

1예상대로 반환됩니다.

뜨다

그러나 부동 소수점 비교로 변환하려고 하면 작동하지 않습니다.

value=0.5
echo $(( $(bc <<< "$value - 0.8") > 0 ? $(bc <<< "$value - 0.8") : 0.1 ))

오류가 발생합니다.

-bash: -.3 > 0 ? -.3 : 0.1 : syntax error: operand expected (error token is ".3 > 0 ? -.3 : 0.1 ")

bc올바른 부동 소수점이 반환되지만 :

$ echo $(bc <<< "$value - 0.8")
-.3

나는 bash가 이런 종류의 부동 소수점 비교를 처리할 수 없다고 생각합니다.

위에서 언급한 것처럼 부동 소수점 숫자의 최소/최대 값을 얻는 간단한 해결 방법이 있습니까?

답변1

bc좋습니다. 값을 비교하고 나머지는 쉘이 수행하도록 하는 간단한 한 줄짜리 코드를 생각해냈습니다.

$ value=0.5
$ [ $(bc <<< "$value - 0.8 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.8") || echo 0.1
0.1
$ [ $(bc <<< "$value - 0.2 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.2") || echo 0.1
.3

또는 bc그 자체를 사용하십시오.

v=0.5
bc <<< "if ($v-0.8>0) $v-0.8 else 0.1" # Result: .1
bc <<< "if ($v-0.2>0) $v-0.2 else 0.1" # Result: .3

관련 정보