12345의 제곱근을 구한 다음 아래 표시된 명령을 사용하여 소수점 이하 100자리까지 확장하려고 합니다.
val=$(bc <<< "scale=100 ; sqrt ( 12345) " )
그러나 문제는 echo 명령에서만 bc를 사용하여 소수점 이하 10자리로 값의 크기를 조정하고 싶지만 작동하지 않는다는 것입니다. 다음 코드 줄을 시도했지만 성공하지 못했습니다.
echo "scale=10 ; "$val" " | bc
echo "scale=10 ; $val " | bc
echo "scale=10 ; val " | bc
여기 누구든지 저를 도와주고 차이점을 알아낼 수 있나요?
참고: 소수점 값의 마지막 자리가 답과 다르기 때문에 sqrt()에서 값을 10자리로 직접 스케일링하고 싶지 않으므로 높은 정확도를 얻으려면 이렇게 해야 합니다.
답변1
BC 반올림이 걱정되지 않는다면 다음과 같이 할 수 있습니다.
$ echo "scale=10 ; "$val/1" " | bc
111.1080555135
값을 나누면(1로도) 소수 자릿수가 로 조정됩니다 scale
.
물론 언제든지 shell printf를 사용할 수 있습니다(역시 약간의 반올림이 발생할 수 있습니다).
$ printf '%5.10f\n' "$val"
111.1080555135
정밀도가 왜 필요한가요?