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