![bc를 사용하여 부동 소수점 값을 int로 반올림하거나 변환하는 방법은 무엇입니까? 가져오기: "(standard_in) 1: 구문 오류"](https://linux55.com/image/4178/bc%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90%20%EA%B0%92%EC%9D%84%20int%EB%A1%9C%20%EB%B0%98%EC%98%AC%EB%A6%BC%ED%95%98%EA%B1%B0%EB%82%98%20%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%3A%20%22(standard_in)%201%3A%20%EA%B5%AC%EB%AC%B8%20%EC%98%A4%EB%A5%98%22.png)
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