printf("부동소수점 출력 : [% 10.2f] ", 0.001234); /* 출력 결과 : [ 0.00] */
printf("부동소수점 출력 : [% 10.2e] ", 0.0012345); /*출력 결과 : [ 1.23e-003] */
printf("부동소수점 출력 : [% 10.2g] ", 0.0012345); /*출력 결과 : [ 0.0012] */
출력 결과 위와 같이 나옵니다.
% 10.2f : 10칸 데이터 공간중 부동소수점 두번째 자리 까지 출력 이라 결과가 제가 생각하는 값과 일치 했습니다.
% 10.2e : 10칸 데이터 공간중 실수를 지수 형태로 변환하여 e 를 이용해 출력 하는거라 결과에 대해 제 생각과 일치했습니다.
그런데 10.2g의 %g 는 위 값을 %e와 %f로 출력시 출력 값의 숫자가 가장 짧은 값을 선정해 출력하는 것으로 책에서도 배웠고 그렇게 알고 있습니다.
그런데 제 생각은 위 % 10.2f 의 결과값이 0.00으로 짧으니 % 10.2g 가 0.00로 나올것이라 생각했는데 왜 0.0012가 나오는 건지 이해가 안됩니다...
소숫점 4번째 자리까지 출력하는 출력 형식을 % 10.4f 에서 나오는 값이 출력 되는 이유가 뭔지 왜 제 생각과 다른 값이 나오는지 궁금합니다.
읽어 주셔서 감사합니다.
헐.. 저도 한참봤네요.
printf("[.2g]\n", 0.001234); 에서 .2g 의미하는 바가 다른 것 뿐입니다.
10.2 에서 앞부분 10 은 간격 고정을 위한 자리값이고
뒷부분 2 는 significant digits 갯수 입니다. 즉, 처음 나타나는 significant digits 2개만을 이용해서 숫자를 표현하겠다는 뜻입니다.
입력한 숫자 0.001234 에서 0 들은 significant digits 가 되지 못하기에 처음 나오는 12 까지 숫자를 읽어들인 겁니다.
그리고, g 파라미터값 사용시에는 e 값이 e+4, e-4 이상 이어야만 자동으로 변경됩니다.
g, G The double argument is converted in style f or e (or F or E for G conversions). The precision specifies the number of significant digits. If the precision is missing, 6 digits are given; if the precision is zero, it is treated as 1. Style e is used if the exponent from its conversion is less than -4 or greater than or equal to the precision. Trailing zeros are remov
간단히 출력 값의 짧은 쪽으로 변경되어서 출력되는게 아닌겁니다.. ㅎㅎ
리눅서//갯수->개수 (개수 (個數)[명사] : 한 개씩 낱으로 셀 수 있는 물건의 수효.) [리듬 맞춤법 봇♬]
상세한 설명 정말 감사합니다 리눅서님. 도움이 많이 된것 같습니다. 감사합니다.ㅎㅎ