하프 플로트 반올림 딜레마
round() 함수에 이상한 문제가 발생했나요? 다음 동작을 관찰하십시오.
for i in range(1, 15, 2): n = i / 2 print(n, "=>", round(n))
부동 값이 일관되게 반올림될 것으로 예상할 수 있지만 놀랍게도 가장 가까운 짝수로 반올림됩니다.
동작 이면의 이유
숫자 유형에 대한 문서에서는 "round(x[, n]) x를 n 자리로 반올림하여 반올림하여 다음 문으로 이 독특한 동작을 명확히 설명합니다. 심지어." 이를 뱅커 라운딩이라고 합니다. 반올림 오류를 증폭시키는 지속적인 반올림 또는 반내림 대신 은행가 반올림은 가장 가까운 짝수를 대상으로 보상합니다.
제어된 반올림을 위한 솔루션
반올림을 정확하게 처리하려면 , 소수 모듈을 활용하세요. 이 모듈에서는 특정 반올림 전략을 지정하는 옵션을 제공합니다. 예를 들어 반올림하려면:
>>> from decimal import localcontext, Decimal, ROUND_HALF_UP >>> with localcontext() as ctx: ... ctx.rounding = ROUND_HALF_UP ... for i in range(1, 15, 2): ... n = Decimal(i) / 2 ... print(n, '=>', n.to_integral_value()) ... 0.5 => 1 1.5 => 2 2.5 => 3 3.5 => 4 4.5 => 5 5.5 => 6 6.5 => 7
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3