Unexpected behaviour of math.floor, round and int functions (rounding)

ast ast at invalid
Fri Nov 19 06:47:06 EST 2021


Le 19/11/2021 à 12:43, ast a écrit :
> Le 19/11/2021 à 03:51, MRAB a écrit :
>> On 2021-11-19 02:40, 2QdxY4RzWzUUiLuE at potatochowder.com wrote:
>>> On 2021-11-18 at 23:16:32 -0300,
>>> René Silva Valdés <rene.silva.valdes at gmail.com> wrote:
>>>
>>>> Hello, I would like to report the following issue:
>>>>
>>>> Working with floats i noticed that:
>>>>
>>>> int(23.99999999999999/12) returns 1, and
>>>> int(23.999999999999999/12) returns 2
>>>>
>>>> This implies that int() function is rounding ...
>>>
>>> It's not int() that's doing the rounding; that second numerator is being
>>> rounded before being divided by 12:
>>>
>>>      Python 3.9.7 (default, Oct 10 2021, 15:13:22)
>>>      [GCC 11.1.0] on linux
>>>      Type "help", "copyright", "credits" or "license" for more 
>>> information.
>>>      >>> 23.999999999999999
>>>      24.0
>>>      >>> (23.999999999999999).hex()
>>>      '0x1.8000000000000p+4'
>>>
>> I think this is a bit clearer because it shows that it's not just 
>> being rounded for display:
>>
>> Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC 
>> v.1929 64 bit (AMD64)] on win32
>> Type "help", "copyright", "credits" or "license" for more information.
>>  >>> 23.99999999999999 == 24
>> False
>>  >>> 23.999999999999999 == 24
>> True
> 
>  >>> 0.3 + 0.3 + 0.3 == 0.9
> False

Better use math.isclose to test equality between 2 floats

 >>> import math
 >>> math.isclose(0.3 + 0.3 + 0.3, 0.9)
True


More information about the Python-list mailing list