Найти - Пользователи
Полная версия: Простое математическое округление
Начало » Python для новичков » Простое математическое округление
1 2
MaratD
Здравствуйте, уважаемые программисты.
Раньше при округлении пользовался round. Было не критично округление к ближайшему четному числу.
Сейчас нужно округлять как в школе, по простой арифметике. Т. е. :
0.5 до 1,
0.4 до 0,
0.6 до 1
Или 15.445 до 15.45, а не до 15.44.
Что-то не нашел какой функцией можно это реализовать. Подскажите кто знает.
Спасибо.
Stepan_M
 import decimal
decimal.getcontext().rounding = 'ROUND_HALF_UP'
a = decimal.Decimal('15.445')
b = a.quantize(decimal.Decimal(".00"))
print (a, b)
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
ZerG
не пойму чем вам 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
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
ZerG
print round(4.335/3, 1) = 1.4
а ТС хочет 1.5.
ZerG
ТС очевидно забыл что округление идет с лева на право
по последней цыфре
по этому 1.44 = 1.4
MaratD
Я хорошо знаю что такое округление в математике.
round не угодил этим:
>>> round(1.5)
2
>>> round(2.5)
2
>>>
По определению он округляет к ближайшему четному числу, это не то что мне нужно.
MaratD
PooH
Потому, что getcontext().prec = 2 точность представления дробной части урезали до 2 знаков, так что на три делится уже 4.33

Даже если 4.33 делится, то почему не показывает 1.44?
ZerG
MaratD
Все же не понял мысль?
round(4.335/3, 2) = 1.45
Вот уже и не ближайшее
Параметры ставьте нужные и все.

Суть в том, что если округлять 1.445 до десятых то это 1.4 а не 1.5 !!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB