루프 포인트에 부동소수점을 추가하려고 합니다. 내 루프는 비순차적입니다.
j=9.46
for i in 8.0 7.5 7.0 6.5 ;do
$i = $i + $j |bc
echo '$i'
나도 시도했다
ans=$(( x + y ))
k=$[$i+$j]
루프 인덱스에 상수를 추가하고 나중에 스크립트의 명령에서 이를 사용해야 합니다. |bc를 사용하여 출력을 에코할 수 있지만 나중에 스크립트에서 변수로 사용할 수는 없습니다.
답변1
셸 bash
(ksh93, zsh 또는 yash와 반대)은 산술 계산에서 부동 소수점 연산을 수행할 수 없지만 항상 부동 소수점 연산을 수행하는 도구를 호출할 수 있습니다. bc
임의의 정밀도 계산에 적합하지만 awk
배열, 산술 및 루프 작업에 적합하므로 다음은 아마도 더 나은 도구입니다.
awk -v increment=9.46 -- '
BEGIN {
for (i = 1; i < ARGC; i++) print ARGV[i] + increment
}' 8.0 7.5 7.0 6.5
출력됩니다:
17.46
16.96
16.46
15.96
awk
기본적으로 정밀도가 6자리인 부동 소수점 숫자가 출력됩니다 . -o OFMT=%.10g
예를 들어 10비트 정밀도를 추가합니다 (내부 계산에서는 double
일반적으로 64비트 정밀도를 갖는 C 유형 숫자를 사용합니다).
답변2
루프에서 다음과 같이 시도해 보십시오.
i1=$(echo " $i + $j" |bc)
echo "$i1"
첫째, 양쪽에 공백이 없어야 합니다. =
두 번째 작은따옴표는 쉘이 변수의 내용을 해석하는 것을 방지합니다.