![0.0에 0을 더할 때 결과가 0이 아니라 0.0인지 어떻게 확인하나요?](https://linux55.com/image/149540/0.0%EC%97%90%200%EC%9D%84%20%EB%8D%94%ED%95%A0%20%EB%95%8C%20%EA%B2%B0%EA%B3%BC%EA%B0%80%200%EC%9D%B4%20%EC%95%84%EB%8B%88%EB%9D%BC%200.0%EC%9D%B8%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%99%95%EC%9D%B8%ED%95%98%EB%82%98%EC%9A%94%3F.png)
파일에는 두 개의 숫자 열이 있으며 첫 번째 줄은 다음과 같습니다.
0 0.0
열 1의 숫자를 열 2의 숫자에 추가하고 결과를 정수가 아닌 부동 소수점으로 유지하고 싶습니다. 따라서 합계가 정수이더라도 첫 번째 행의 결과는 0.0이어야 하고 다른 행의 결과는 .0이어야 합니다.
나는 awk를 시도했습니다 :
awk '{printf "%.1g\n", $0=$1+$2}' > sum.txt
소수점 "%.1g\n" 뒤에 한 자리를 유지하라고 지시했지만 여전히 정수 0이 표시됩니다.
답변1
GNU awk 매뉴얼에서는 이것을 볼 수 없지만 예를 들어printf()
함수의 매뉴얼 페이지%g
이것은 glibc에 언급되어 있습니다 .
결과의 소수 부분에서 후행 0을 제거합니다. 소수점은 뒤에 하나 이상의 숫자가 오는 경우에만 나타납니다.
#
또한 다음을 의미하는 "대체 형식" 수정자가 있습니다 .
g 및 G 변환의 경우 후행 0은 결과에서 제거되지 않습니다.
또한 필요에 따라 형식이 %g
자동으로 변경됩니다 1.23e+3
. 정확한해당 필드(점 뒤의 숫자)는 "최대 수량"입니다.유효수g 및 G 변환의 경우" (아니요소수점 이하 자릿수), 다음과 같은 결과를 얻습니다.
printf "%#.1g\n", 0 0.
printf "%#.2g\n", 0 0.0
printf "%#.2g\n", 12 12.
printf "%#.2g\n", 1234 1.2e+03
따라서 소수점을 강제로 표시할 수는 있지만 뒤에 오는 0을 강제로 표시할 수는 없습니다.
또 다른 옵션은 다음을 사용하는 것입니다 %f
.
printf "%.1f\n", 0 0.0
printf "%.1f\n", 1234 1234.0
또는 필요한 경우 점 뒤에 누락된 0을 추가합니다.
a = sprintf("%#.1g", 0); if (substr(a, length(a)) == ".") a = a "0";
답변2
다음 명령을 사용해보십시오
echo "0 0.0"| awk '{sum=$1+$2;printf "%.1f",sum}'
산출
echo "0 0.0"| awk '{sum=$1+$2;printf "%.2f",sum}'
output
0.0