bc를 사용하여 부동 소수점 값을 int로 반올림하거나 변환하는 방법은 무엇입니까? 가져오기: "(standard_in) 1: 구문 오류"

bc를 사용하여 부동 소수점 값을 int로 반올림하거나 변환하는 방법은 무엇입니까? 가져오기: "(standard_in) 1: 구문 오류"

2743410360.320과 같은 값을 얻고 변수에 2743410360과 같은 값을 원합니다.

나는 노력했다

INTValueOfGB=$ echo "($gb+0.5)/1" | bc

그런데 점점 더 많아지네요 (standard_in) 1: syntax error

답변1

printf반올림 에 사용할 수 있습니다 .

$ printf "%.0f" 2743410360.320

답변2

@vin의 질문에 대한 답변이 표시되지 않습니다.

그런데 점점 더 많아지네요(standard_in) 1: syntax error

bc명령은 (standard_in) 1: syntax error쉘 변수가 gb설정되지 않았기 때문에 인쇄됩니다.

$ unset gb
$ echo "($gb+0.5)/1" | bc
(standard_in) 1: syntax error

$ gb=2743410360.320
$ echo "($gb+0.5)/1" | bc
2743410360

@dchirikov의 답변에 대한 의견에서 @vin은 printf "%.0f""작동하지 않습니다"라고 말했습니다.

$ unset gb
$ printf '%.0f\n' $gb
0

$ gb=2743410360.320
$ printf '%.0f\n' $gb
2743410360

@vin에 문제가 있는 두 영역 모두에서 설정되지 않은 변수가 문제를 재현하고 변수를 설정하면 문제가 해결되었습니다.

답변3

$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360

답변4

명령에는 여러 가지가 필요합니다 ( ).

INTValueOfGB=$( echo "($gb+0.5)/1" | bc )

하지만 이렇게 하면 숫자가 반올림되지 않으므로 눈금을 0으로 설정해야 합니다.

INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc )

그러면 (x.5부터) 다음 정수로 반올림됩니다.

"다음 짝수로 반올림"(뱅커의 규칙)하려면 printf 반올림을 사용해야 합니다.

LC_NUMERIC=C printf "%.0f" 2743410360.320

LC_NUMERIC은 숫자가 소수점 단위로 처리되도록 하는 데 사용됩니다. 이것은 독일 사용자가 사용하고 싶어하는 것이 아니며 소수점 이하 자릿수에서도 작동합니다 ,.

$ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320
2743410360

관련 정보