Форум сайта python.su
0
Здравствуйте, уважаемые программисты.
Раньше при округлении пользовался round. Было не критично округление к ближайшему четному числу.
Сейчас нужно округлять как в школе, по простой арифметике. Т. е. :
0.5 до 1,
0.4 до 0,
0.6 до 1
Или 15.445 до 15.45, а не до 15.44.
Что-то не нашел какой функцией можно это реализовать. Подскажите кто знает.
Спасибо.
Офлайн
1
import decimal decimal.getcontext().rounding = 'ROUND_HALF_UP' a = decimal.Decimal('15.445') b = a.quantize(decimal.Decimal(".00")) print (a, b)
Офлайн
0
Почему так считает?
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 2
>>> Decimal('1.10') / 3
Decimal('0.37')
>>> Decimal('4.335') / 3
Decimal('1.4')
>>>
Должно же 1.45
Офлайн
61
не пойму чем вам round не угодил?
4.335/3 = 1.445
print round(4.335/3, 2) = 1.45 print round(4.335/3, 1) = 1.4 print round(4.335/3) = 1.0
# -*- coding: utf-8 -*- import math res = 4.335/3 print math.ceil(res)
Офлайн
72
MaratDПотому, что getcontext().prec = 2 точность представления дробной части урезали до 2 знаков, так что на три делится уже 4.33
Почему так считает?
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 2
>>> Decimal('1.10') / 3
Decimal('0.37')
>>> Decimal('4.335') / 3
Decimal('1.4')
>>>
Должно же 1.45
Офлайн
Офлайн
20
ZerGа ТС хочет 1.5.
print round(4.335/3, 1) = 1.4
Офлайн
61
ТС очевидно забыл что округление идет с лева на право
по последней цыфре
по этому 1.44 = 1.4
Офлайн
0
Я хорошо знаю что такое округление в математике.
round не угодил этим:
>>> round(1.5)
2
>>> round(2.5)
2
>>>
По определению он округляет к ближайшему четному числу, это не то что мне нужно.
Офлайн
0
PooH
Потому, что getcontext().prec = 2 точность представления дробной части урезали до 2 знаков, так что на три делится уже 4.33
Даже если 4.33 делится, то почему не показывает 1.44?
Офлайн
61
MaratD
Все же не понял мысль?
round(4.335/3, 2) = 1.45
Вот уже и не ближайшее
Параметры ставьте нужные и все.
Суть в том, что если округлять 1.445 до десятых то это 1.4 а не 1.5 !!!
Офлайн