문제

그만큼 // Python의 "Integer Division"운영자는 오늘 저를 놀라게했습니다.

>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0

그만큼 선적 서류 비치 "(바닥) x와 y의 몫"을 읽습니다. 그렇다면 왜 Math.floor (11/1.1)가 10과 같지만 11 // 1.1은 9와 같습니까?

도움이 되었습니까?

해결책

1.1은 이진 형태로 정확하게 표현할 수 없기 때문입니다. 근사치는 1.1보다 높은 리틀러이므로 분할 결과가 너무 작습니다.

다음을 시도하십시오.

Python 2에서 콘솔에 입력하십시오.

>>> 1.1
1.1000000000000001

Python 3.1에는 콘솔이 표시됩니다 1.1, 그러나 내부적으로는 여전히 같은 숫자입니다.

하지만:

>>> 11/1.1
10.0

Gnibbler가 지적했듯이, 이것은 플로트의 가용 정밀 한계 내에서 "내부 반올림"의 결과입니다. 그리고 Myyn이 그의 의견에서 지적한 것처럼 // 다른 알고리즘을 사용하여 바닥 분할 결과를 계산합니다. math.floor() 보존하기 위해 a == (a//b)*b + a%b 가능합니다.

사용 Decimal 이 정밀도가 필요한 경우 입력하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top