Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2013 19:43:35

VadimR
Зарегистрирован: 2013-06-06
Сообщения: 14
Репутация: +  1  -
Профиль   Отправить e-mail  

Округление

>>> round(3.5)
4
>>> round(10.5)
10

Это так задумано или я что-то не понимаю?
Было убито не мало времени чтобы выяснить откуда косяки

Офлайн

#2 Окт. 20, 2013 19:49:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Округление

Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> round (3.5)
4.0
>>> round (10.5)
11.0
>>>



Офлайн

#3 Окт. 20, 2013 19:52:53

VadimR
Зарегистрирован: 2013-06-06
Сообщения: 14
Репутация: +  1  -
Профиль   Отправить e-mail  

Округление

Да, такая проблема в третьем питоне.

Офлайн

#4 Окт. 20, 2013 19:56:49

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Округление

Офлайн

#5 Окт. 20, 2013 23:56:50

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Округление

This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float.
и что получается товарищи, что Python3 не может осилить 10.5 как float? Пока мне кто то не разъяснит, выглядит это как дичайший бред.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Окт. 21, 2013 01:35:17

Euler
Зарегистрирован: 2013-07-30
Сообщения: 43
Репутация: +  1  -
Профиль   Отправить e-mail  

Округление

smoke853
http://docs.python.org/3/library/functions.html?highlight=round#roundВ примечании про это написано.
Эээ, нет. В примечании написано про 2.675, а не про 10.5. Разница тут существенна, 10.5 в двоичной системе представляется как 1010.1, а 2.675 только как периодическая дробь 10.101(0110).
А косяк с непериодической дробью лично для меня большой сюрприз, хотя и не существенный. Получается, что нечётные он округляет правильно, а чётные в меньшую сторону.

Офлайн

#7 Окт. 21, 2013 04:56:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Округление

>>> 10.49999999999999999999999999999999999999
10.5
>>> round(10.49999999999999999999999999999999999999)
10
>>> 10.49999999999999999999999999999999999999 == 10.5
True
>>>

>>> round(10.5000000000000000000000001)
10
>>> round(10.500000000000001)
11
>>>



Отредактировано py.user.next (Окт. 21, 2013 04:57:23)

Офлайн

#8 Окт. 21, 2013 05:45:39

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Округление

Я думал что модуль decimal “спасет” ситуацию, однако нет.

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> f=10.5
>>> d=decimal.Decimal(10.5)
>>> map(round, (f,d))
[11.0, 11.0]

Python 3.3.0 (default, Oct 01 2012, 09:13:30) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> d=decimal.Decimal(10.5)
>>> f=10.5
>>> list(map(round, (f,d)))
[10, 10]



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Окт. 21, 2013 06:57:46

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Округление

JOHN_16, decimal спасет ситуацию, если писать например так:

>>> from decimal import Decimal
>>> Decimal('10.5').quantize(Decimal('1.'), rounding='ROUND_HALF_UP')
Decimal('11')

Отредактировано smoke853 (Окт. 21, 2013 06:58:51)

Офлайн

#10 Окт. 21, 2013 07:21:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Округление

smoke853
мерзкий Питончик то получается))) где ж всеми любимая хваленая простота)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version