-----------------------------------------------------------
도움이 되었으면 우측하단 또는 좌측하단에 하트 한번만 눌러주세요 :)
21.01.25 15:26 작성
·
1.1K
0
궁금한 점
- print('%10.2f' % (12345.141592653589793))를 예로 들어보면,
- 12345.14
- 로 총 10자리에 소수점 2자리로 의도했던 대로 나오지만,
- print('%10.2f' % (123456789.141592653589793))를 예로 들어보면,
- 123456789.14
- 가 나와서, 전체 자리수 제한이 걸리지 않는데 왜 그러는건가요?
- 그냥 정수부 자리수가 총 자리수 제한을 초과하면 소수점 자리만 신경쓰는건가요?
답변 5
0
0
2021. 01. 26. 10:54
감사합니다! 그렇다면 이제
%전체길이.소수점의 나오는 개수
정수부의 길이가 길어서 출력의 자릿수가 지정했던 총 자릿수를 초과하게 되면 초과한 만큼을 그대로 출력한다.
라고 이해하면 될까요?
보통은 소수점 이하 N자리 제한을 많이 거는 편이니 정수의 자리수는 크게 신경 안써도 되겠네요!
0
저는 강사님이 아니고 학생입니다.
저도 배워가는 처지고 배운 것 중에 제가 답변할 수 있는 질문게시물에는 답변해드리려고 노력 중입니다!
비슷비슷한 내용이 인프런에 있을 수 있지만,
답변이 달린 내용을 보다면 미묘하게 자기가 질문하려고 하는 부분이 다를 수 있습니다.
이 부분에 대해서는 먼저 검색(구글링, stackoverflow 등)을 통해 찾아보시고,
그다음에 질문을 하는 것도 나쁘지 않습니다 :)
----------------------------------------------------------
저도 이 부분을 잘 몰라서 구글링한 결과 (https://dojang.io/mod/page/view.php?id=2300)
실수는 점을 기준으로 점 앞은 정렬할 길이 지정하고, 점 뒤는 소수점 이하의 자릿수 지정한다고 합니다.
곰곰이 생각해봤는데 정렬할 길이 지정이라는 부분은 하나의 약속 같은 개념이 아닐까요?
총 자릿수는 10이고 소수점의 나오는 개수는 2개입니다.
Colab을 돌리면서 혹시나 하는 마음에 len을 사용하여 확인 길이를 확인해봤습니다.
공란을 0으로 채우는건 이해하셨다고 하니 공란을 0으로 사용하겠습니다.
print('%010.2f' % (.141592653589793))
print("길이 : ",len('%010.2f' % (.141592653589793)),"\n")
print('%010.2f' % (1.141592653589793))
print("길이 : ",len('%010.2f' % (1.141592653589793)),"\n")
print('%010.2f' % (12345.141592653589793))
print("길이 : ",len('%010.2f' % (12345.141592653589793)),"\n")
print('%010.2f' % (123456789.141592653589793))
print("길이 : ",len('%010.2f' % (123456789.141592653589793)),"\n")
#출력 결과
#0000000.14
#길이 : 10
#
#0000001.14
#길이 : 10
#
#0012345.14
#길이 : 10
#
#123456789.14
#길이 : 12
이로써 어떤 숫자를 정렬할 길이로 지정하면
정수 부분이 0개, 1개 상관없이 .(점), 소수점 자리 이하까지 포함한 총 자릿수는 보장한다는 것을 알 수 있습니다!
만약 정수 부분이 지정한 것보다 길게 입력했다면
보장하는 범위를 넘어가기 때문에 초과한 만큼 출력을 하는 것입니다.
----------------------------------------------------------
제가 예시로 든
%전체길이.소수점의 나오는 갯수
이것도 어느 정도 맞는 말입니다!
다만, .(점)을 기준으로 한다는 게 없었던 것과 요약으로 한 설명이 모호했었네요....
이제는 이렇게 작성해야겠네요 :)
%전체길이.소수점의 나오는 개수
----------------------------------------------------------
저도 개념이 정확한지 안 한 지 몰라 일단 제가 아는 선에 대해 저렇게 작성을 했던 것이고,
혹시나 강사님 보시면 제가 몰랐던 부분을 저런 식으로 ps.를 통해 질문을 작성한 것입니다.
0
2021. 01. 25. 23:09
공란을 0으로 채우는 건 이해했는데..
보여주신 예시에서 첫번째 프린트문과 세번째 프린트문 모두 '%10.2f'인데
첫번째 프린트문의 '%10.2f'의 출력결과는 '123456789.14'로 총 12자리가 나오고 (정수부 9자리 + 소수부 2자리 + . 1자리)
세번째 프린트문의 '%10.2f'의 출력결과는 ' 12345.14'로 총 10자리가 나옵니다. (정수부 공백 포함 7자리 + 소수부 2자리 + . 1자리)
이는, 말씀하신 %전체길이.소수점의 나오는 갯수
과 부합하지 않는 예시라고 생각합니다.
이와 관련된 비슷한 질문이 많은데 그 어디에도 명확한 답변이 없어 질문 드립니다.
0
%전체길이.소수점의 나오는 갯수
로 알고있습니다.
그럼 %10.2f를 해석하면
총 자리수는 10이고 소수점의 나오는 갯수는 2개입니다.
print('%10.2f' % (123456789.141592653589793))
print('%010.2f' % (123456789.141592653589793))
print()
print('%10.2f' % (12345.141592653589793))
print('%010.2f' % (12345.141592653589793))
#출력결과
#123456789.14
#123456789.14
#
# 12345.14
#0012345.14
앞에 0을 부착한 이유는 나머지부분을 0으로 표현하기 위해서 부착하였습니다.
그리고 읽어보시고 이해가 안되시면 답글 남겨주세요!
그럼, 강사님이 좀 더 알려주실 거예요!
-----------------------------------------------------------
ps. 강사님 jyi4719님 답글 작성 중에 궁금한 점이 있습니다!
총 자리수를 카운트를 할 때 0부터 시작해서 카운트를 하는건가요?
또한, 소수점을 포함해야하나요?
123456789.14인 경우
(123456789)(.)(14) 이렇게 3등분으로 나눠서 카운트를 하는건가요?
정수부분 8자리 (0부터 시작) / . 1자리 / 실수부분 1자리
그래서 총 10자리인지 궁금합니다!
-----------------------------------------------------------
도움이 되었으면 우측하단 또는 좌측하단에 하트 한번만 눌러주세요 :)