en en ko ko ko ko ko ko ko en ko ko ko ko en ko ko en ko nl ko ko ko en nl ko es ko en ko nl ko fr nl ko en vi ko en ko nl ko ko ko ko ko zh en en en en en pt en it en en en sv fr en en en en en en en es fr en en en fr ja en en de en en en en en hu ja pt ru en en en en en ko ko ko ko ko ko ko en pt sv en ko ko ko ko ko ko ko ko ko ko ko en en
bash 산술의 나눗셈이 왜 대부분의 백분율을 0으로 계산합니까? 1 $max); do
스크립트에 대해 bash arithemetic을 시도하지만 $e끝날 때까지 업데이트되지 않습니다. 출력 자체를 말합니다.
T1; DR : 1..5를 백분율로 표시한다.
bash정수가 아닌 산술을 처리 할 수 ​​없습니다. 모든 표현식이 정수인 한 올바른 결과를 제공합니다. 따라서 계산 어딘가에 정수가 아닌 값을 얻는 것을 피해야합니다.
당신이 평가하고 귀하의 경우에서 1 / 5, 2 / 5등은 일부 비 정수 값으로 정수를 bash는 correspondings에서 0 값을 생성하고 결과는 따라 제로로 나오고있다. 나누기와 곱셈의 우선 순위 는 동일하며 동일한 선행 연산자는 항상 식에 배치 될 때 왼쪽에서 오른쪽으로 실행됩니다.
한 가지 해결 방법은 곱셈을 먼저 한 다음 나누기이므로 bash는 정수가 아닌 값을 처리 할 필요가 없습니다. 올바른 표현은
$ max=5; for e in $(seq 1 1 $max); do percent=$(( $e*100/$max )); echo "echo $e / $max : = $percent"; done echo 1 / 5 : = 20 echo 2 / 5 : = 40 echo 3 / 5 : = 60 echo 4 / 5 : = 80 echo 5 / 5 : = 100
Bash는 이런 종류의 산술에서 잘하지 못합니다 … 문제는 다음과 같습니다.
$ echo $((1/5)) 0 $ echo $((2/5)) 0 $ echo $((4/5)) 0 $ echo $((4/5)) 0
정수가 아닌 값을 처리해야하는 경우 bc
$ max=5; for e in $(seq 1 1 "$max"); do percent=$(bc <<< "scale=1 ; $e/$max*100") ; echo "echo $e / $max : = ${percent%.*}"; done echo 1 / 5 : = 20 echo 2 / 5 : = 40 echo 3 / 5 : = 60 echo 4 / 5 : = 80 echo 5 / 5 : = 100
(출력을 정수로 형식화하는 방법을 지적한 @Arronical 덕분에)
bash와 달리 awk는 완전한 부동 소수점 산술을 제공합니다. 예를 들면 다음과 같습니다.
$ awk -v max=5 'BEGIN{for (e=1;e<=max;e++) print "echo " e " / " max " : = " 100*e/max}' echo 1 / 5 : = 20 echo 2 / 5 : = 40 echo 3 / 5 : = 60 echo 4 / 5 : = 80 echo 5 / 5 : = 100
다음의 산술 평가 섹션을 참조하십시오.
이 글은 우분투 카테고리에 분류되었고 bash, command-line, scripts 태그가 있으며 [호호] 야야님에 의해 2022년 9월 25일에 작성되었습니다.
기본 Wi-Fi 설정 및 암호 배포 및 설정을 설정하고 처럼 그런
제로 충전은 virtualbox 동적 디스크 이미지의 크기를 증가시킵니다 있습니다.) 추가 질문 중 하나는 디스크 크기를 늘리지
Amazon ECS에서 서비스 컨테이너 업데이트 업데이트 한 경우, 해당 이미지와
가운데 클릭을위한 트리플 핑거 탭? 클릭을 위해
설치된 응용 프로그램 중 / usr / bin 또는 사용자의 홈 디렉토리 중 어떤 것이 더 낫습니까? 디렉토리 에 설치하는 것이 더
apthow.com powered by hoya