bash + 숫자에서 백분율을 계산하는 방법

bash + 숫자에서 백분율을 계산하는 방법

숫자로 백분율을 계산하는 방법

예를 들어, 우리는

number=248

우리는 $number의 80%가 무엇인지 알고 싶습니다.

그렇다면 Bash에서는 어떻게 계산합니까?

예상 출력 198(정확히는 198.4이지만 반내림하고 싶습니다)

답변1

bash부동 소수점 계산을 할 수는 없지만 정밀도가 많이 필요하지 않으면 다음과 같이 가짜로 만들 수 있습니다.

$ number=248
$ echo $(( number*80/100 ))
198

답변2

Bash 자체는 부동 소수점 연산을 처리할 수 없습니다. 가장 좋은 방법은 bc다음과 같이 사용하는 것입니다.

$ bc <<<"248*80/100"
198

쉘(bash, sh)은 정수만 계산할 수 있습니다.

$ bash -c 'echo $((248*80/100))'
198

ksh93은 부동 소수점 연산을 처리할 수 있습니다.

$ ksh -c 'echo $((248*0.8))'
198.4

소수점 이하 0의 형식:

$ ksh -c 'printf "%.0f\n" "$((248*0.8))"'

zsh는 다르게 수행합니다.

$ zsh -c 'echo $((248*0.8))'
198.40000000000001

그러나 포맷하면 올바른 값이 됩니다.

$ zsh -c 'printf "%.0f\n" "$((248*0.8))"'
198

또는 awk로 다음을 수행할 수 있습니다.

$ awk -vn=248 'BEGIN{print(n*0.8)}'
198.4

또는 소수점이 0인 경우:

$ awk -vn=248 'BEGIN{printf("%.0f\n",n*0.8)}'
198

답변3

그리고awk표현하다:

$ number=248
$ awk -v n="$number" 'BEGIN{ print int(n*0.8) }'
198

답변4

합계가 양수이고 가장 큰 정수를 넘지 않는다고 가정하면 p백분율 은 다음과 같습니다 .np*n + 100pn

반올림:

$(( p*n / 100 )) 

가장 가까운 값 또는 절반으로 반올림합니다.

$(( (p*n+50) / 100 )) 

모으다:

$(( (p*n+99) / 100 )) 

관련 정보