나머지 값이 다르게 나옵니다.

조회수 65회

divmod, 그리고 % 명령시 계산한 나머지를 얻을 수 있는 것으로 알고 있는데 나머지 값이 제가 생각한 값과는 너무 다르게 나옵니다.

제가 잘못 알고 있는 걸까요??

a = divmod(458.2, 60)
print(a)
>> (7.0, 38.19999999999999)
a = 458.2
b = 60
c = a // b
d = a % b
e = a / b
print(c, d, e)
>> 7.0 38.19999999999999 7.636666666666667
  • 저도 궁금해서 찾아보니 더블 슬래시 연산자는 소수점 버림 나눔 연산자라서 이상할 게 없고, 나머지는 대체로 파이썬 부동소수점 이슈인 거 같아요. 꼬우면 포맷팅이든 반올림이든 알아서 해라 하는... 엽토군 2022.6.20 10:58
  • 부동소수점으로 찾아보니 이진수로 변환해서 계산해서 나오는 문제군요;; 초보 2022.6.20 11:03
  • 0.1 * 0.1 !== 0.01 🤭 편집요청빌런 2022.6.20 14:46
  • 무슨 뜻인지 모르겠습니다; 초보 2022.6.20 15:24
  • 아 부동소수점 때문에 컴퓨터의 계산과 사람의 계산이 다르다는 의미였어요. 0.1 * 0.1은 0.01이어야 하는데 코드로 돌려보면 0.010000000000000002 거든요. 편집요청빌런 2022.6.20 15:44
  • 딴소리지만 부동소수점은 이름을 왜 이렇게 지었나 참 그래요. 부유소수점이나 유동소수점이라고 하던가. 아 이러면 유부나 우동같아서 좀 그런가요? 😆 편집요청빌런 2022.6.20 15:48
  • 글쎄요.. 그냥 번역하는 사람이 대충 한 결과물이 아닐까 생각합니다. ㅋㅋ 초보 2022.6.20 15:51
  • 계산기 자동화용으로 사용한 것들도 있는데 어쩐지 값이 미묘하게 이상하더라니.. 그냥 나누기 한 다음에 자체 함수 만들어서 정수 부분 소수점 부분 나누던지 해야겠네요. ㅠㅠ 초보 2022.6.20 15:52
  • 자바나 JS에서는 데이터 타입에 정밀도를 지정해서 지정한 범위를 넘어가면 버리거나 반올림하는 식으로 사용합니다. 파이썬도 비슷한게 이미 있을 것 같은디요? 편집요청빌런 2022.6.20 16:08
  • 음.. 그냥 아는 것만 가져다 써서 잘 모르겠습니다. 한 번 찾아봐야겠네요. 초보 2022.6.20 16:27
  • 흠.. 그냥 이진수로 변환해서 계산한 다음 다시 10진수로 변환해버리는건 너무 단순한 생각일까요? 초보 2022.6.30 15:01
  • 십진수 소수점 이하를 이진수로 변환하는 것에서 문제가 발생하는거라... 어떤 소수점 이하값은 이진수로 변환할 때 무한소수가 되거든요. 편집요청빌런 2022.7.2 00:10

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.