MaratD
Авг. 10, 2016 11:54:38
Здравствуйте, уважаемые программисты.
Раньше при округлении пользовался round. Было не критично округление к ближайшему четному числу.
Сейчас нужно округлять как в школе, по простой арифметике. Т. е. :
0.5 до 1,
0.4 до 0,
0.6 до 1
Или 15.445 до 15.45, а не до 15.44.
Что-то не нашел какой функцией можно это реализовать. Подскажите кто знает.
Спасибо.
Stepan_M
Авг. 10, 2016 16:40:22
import decimal
decimal.getcontext().rounding = 'ROUND_HALF_UP'
a = decimal.Decimal('15.445')
b = a.quantize(decimal.Decimal(".00"))
print (a, b)
MaratD
Авг. 11, 2016 08:19:18
Почему так считает?
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 2
>>> Decimal('1.10') / 3
Decimal('0.37')
>>> Decimal('4.335') / 3
Decimal('1.4')
>>>
Должно же 1.45
ZerG
Авг. 11, 2016 09:16:07
не пойму чем вам 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)
2.0
PooH
Авг. 11, 2016 09:40:09
MaratD
Почему так считает?
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 2
>>> Decimal('1.10') / 3
Decimal('0.37')
>>> Decimal('4.335') / 3
Decimal('1.4')
>>>
Должно же 1.45
Офлайн
Потому, что getcontext().prec = 2 точность представления дробной части урезали до 2 знаков, так что на три делится уже 4.33
noob_saibot
Авг. 11, 2016 12:50:14
ZerG
print round(4.335/3, 1) = 1.4
а ТС хочет 1.5.
ZerG
Авг. 11, 2016 14:14:11
ТС очевидно забыл что округление идет с лева на право
по последней цыфре
по этому 1.44 = 1.4
MaratD
Авг. 11, 2016 15:23:10
Я хорошо знаю что такое округление в математике.
round не угодил этим:
>>> round(1.5)
2
>>> round(2.5)
2
>>>
По определению он округляет к ближайшему четному числу, это не то что мне нужно.
MaratD
Авг. 11, 2016 15:31:26
PooH
Потому, что getcontext().prec = 2 точность представления дробной части урезали до 2 знаков, так что на три делится уже 4.33
Даже если 4.33 делится, то почему не показывает 1.44?
ZerG
Авг. 11, 2016 15:53:34
MaratD
Все же не понял мысль?
round(4.335/3, 2) = 1.45
Вот уже и не ближайшее
Параметры ставьте нужные и все.
Суть в том, что если округлять 1.445 до десятых то это 1.4 а не 1.5 !!!