0.0에 0을 더할 때 결과가 0이 아니라 0.0인지 어떻게 확인하나요?

0.0에 0을 더할 때 결과가 0이 아니라 0.0인지 어떻게 확인하나요?

파일에는 두 개의 숫자 열이 있으며 첫 번째 줄은 다음과 같습니다.

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

관련 정보