부동 소수점 값을 사용하는 스크립트가 있는데 두 개의 부동 소수점을 뺄 수 없는 이유가 있습니다.
샘플 코드입니다
#!/bin/bash
p="1"
h="10"
m=$(echo "3.5"| bc -l)
for (( c=$p; c<=$h; c++ ))
do
r=$(echo "($p-$m)"| bc -l)
echo "Z $c $m $r"
done
그리고 이게 그 결과야
Z 1 3.5 -2.5
Z 2 3.5 -2.5
Z 3 3.5 -2.5
Z 4 3.5 -2.5
Z 5 3.5 -2.5
Z 6 3.5 -2.5
Z 7 3.5 -2.5
Z 8 3.5 -2.5
Z 9 3.5 -2.5
Z 10 3.5 -2.5
답변1
줄을 바꾸세요
r=$(echo "($p-$m)"| bc -l)
에게
r=$(echo "($c-$m)"| bc -l)
그렇지 않지만 $p
루프 $c
에 의해 변경됩니다.
답변2
bash
부동 소수점 연산을 지원하지 않습니다. ksh
그리고 zsh
그렇게. POSIXLy, bc
다음 중 하나를 사용할 수 있습니다 .플로리안의 대답제안하거나 awk
. 예를 들어,
$ awk 'BEGIN{print 2.5+3.7}'
6.2
Python
우분투(Ubuntu ) 도 Perl
부동 소수점 계산을 수행할 수 있는 기능을 갖추고 있습니다.
$ perl -le 'print(2.5+3.7)'
6.2
$ python3 -c 'print(2.5+3.7)'
6.2
다른 옵션의 매우 광범위한 목록도 참조하세요.Bash 또는 다른 언어/프레임워크에서 정수 및 부동 소수점 계산을 수행하는 방법은 무엇입니까?
또한 에 따르면POSIX 쉘 언어 표준산술 확장에서 $((...))
:
부호 있는 긴 정수 연산만 필요합니다. 확장 기능으로 쉘은 나열된 것 이상의 연산 표현식을 인식할 수 있습니다.
따라서 부동 소수점 연산을 생략하면 bash
POSIX /bin/dash
사양을 따릅니다.
답변3
늦었다는 건 알지만 결과가 구글에 나오니까 누군가 이 글을 읽을 수도 있겠네요. 해결책은 "$a- $b"로 작성하는 것입니다. 공간은 나를 위해 일하게 만듭니다.