- 1
- 2
>>> round(2.675, 2)
2.67
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−108
>>> round(2.675, 2)
2.67
Кто-бы мог подумать?
http://docs.python.org/2/tutorial/floatingpoint.html
guest 30.10.2012 15:53 # +6
Yurik 30.10.2012 17:16 # +1
Почему не так?
http://ideone.com/Sk6mbO
РНР
http://ideone.com/k3zuvz
Руби
http://ideone.com/RlHK4a
guest 30.10.2012 19:33 # +2
Изначально вы округляете float/double (который естественно точно не представим, ибо в знаменателе остается 5). А "проверяете" через decimal из строки. Это корректно?
По поводу других примеров: лишь хочу сказать, что гарантии на 2.68 нет.
WGH 30.10.2012 17:11 # 0
3.14159265 30.10.2012 19:44 # 0
http://ideone.com/izjPRy
Но в этом бухгалерском округлении есть даже что-то особенное - сумма флоатов-то будет ближе к истине.
Вот и в VB по дефолту работало бухглалтерское округление. Меня это поначалу смущало, но потом я понял что язык был больше ориентирован на бухгалтерию и секретарш, но был изгажен dll-ками, ActiveX, AddressOf ами, классами и возможностью вызвать WinApi.
VB в макросах под офис был шагом в нужном направлении - там многое из этого убрали.
А 1С довел идею до совершенства. Совсем не удивлюсь если 1С округляет четные в одну, а нечетные в другую.
3.14159265 30.10.2012 19:47 # 0
Это не говно и не баг, а в какой-то мере фича.
http://ideone.com/J9Emrl
Убедится в этом можно так:
/r пример сложения 1000 рандомных чисел с "половинками"
а) просто сложить
б) с дефолтным округлением
в) с тем округлением которые считается "правильным" - например вверх.
Сравнить какой из джвух способов ближе к истине.
TarasB 30.10.2012 20:11 # 0
3.14159265 30.10.2012 20:30 # 0
http://ideone.com/Oe1OQ8
За это я его и плюсанул.
bormand 30.10.2012 20:56 # 0
Да хотя оно еще и к нечетному получилось ;)
bormand 30.10.2012 21:13 # +3
http://ideone.com/xuDG7N
3.14159265 30.10.2012 21:37 # +1
Я и имел ввиду когда говорил что это "в какой-то мере фича".
Ведь в тех случаях где его юзают - важно чтобы было примерно 50/50 (и совсем не важно четные, нечетные) - статистика сделает своё дело.
bormand 30.10.2012 20:54 # +2
Хочешь устроить холивар? Они все правильные, просто для разных ситуаций.
> Кажется, зависит от чётности цифры, идущей за .5
Если бухгалтерское округление - то к ближайшему четному, поэтому зависит от четности цифры, стоящей перед 5. Если арифметическое - то там вроде всегда вверх.
3.14159265 30.10.2012 21:07 # 0
TarasB 01.11.2012 17:38 # +1
PascalGovno 01.11.2012 18:04 # +3
А бюстгалтерское округление по сути является статистическим округлением для бедных, где берут четность последнего знака вместо равномерно распределенной случайной величины. Угадайте кто придумал так делать...
anonimb84a2f6fd141 05.04.2013 20:11 # 0
Детерминированость не нужна?
Fai 30.10.2012 23:37 # +2
roman-kashitsyn 01.11.2012 00:05 # +2
LispGovno 01.11.2012 00:36 # 0