BC 스케일 반올림 오류

BC 스케일 반올림 오류

계산된 값을 잘라내려고 시도했지만 bc설정하면 scale=0전체 계산이 0을 반환합니다. 이 설정은 scale=1올바른 값인 357.3을 반환하지만 scale=0항상 0을 반환합니다.

다음은 계산 예시입니다.

echo "scale=0; 3573 * (10 / 100)/1" | bc -l
0

echo "scale=1; 3573 * (10 / 100)/1" | bc -l
357.3

부동 소수점 숫자를 정수로 자르는 올바른 방법이 아닌가요 bc? bash 스크립팅에 정수로 사용하고 싶습니다. 감사해요!

답변1

작업 순서를 사용하는 추가 출력:

echo "scale=0; 3573 * 10 / 100" | bc -l   # 357
echo "scale=0; 3573 / 100 * 10" | bc -l   # 350

답변2

사용하기 awk더 편한 것 같아요 ,

awk 'BEGIN { print int(3573 * (10/100)/1) }'
357

답변3

@Paul_Pedant의 생각이 맞습니다.: scale계산의 모든 부분에 적용됩니다. 10 / 100 = 0(크기는 0):

$ bc <<< 'scale = 0; 10 / 100'
0

따라서 전체 계산 결과는 0입니다.

답변4

사용 printf:

$ LC_ALL=C printf "%.0f\n" $(echo "3573 * (10 / 100)/1" | bc -l)
357

관련 정보