Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 10, 2016 11:54:38

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Простое математическое округление

Здравствуйте, уважаемые программисты.
Раньше при округлении пользовался round. Было не критично округление к ближайшему четному числу.
Сейчас нужно округлять как в школе, по простой арифметике. Т. е. :
0.5 до 1,
0.4 до 0,
0.6 до 1
Или 15.445 до 15.45, а не до 15.44.
Что-то не нашел какой функцией можно это реализовать. Подскажите кто знает.
Спасибо.

Офлайн

#2 Авг. 10, 2016 16:40:22

Stepan_M
Зарегистрирован: 2016-07-20
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Простое математическое округление

 import decimal
decimal.getcontext().rounding = 'ROUND_HALF_UP'
a = decimal.Decimal('15.445')
b = a.quantize(decimal.Decimal(".00"))
print (a, b)

Офлайн

#3 Авг. 11, 2016 08:19:18

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Простое математическое округление

Почему так считает?

>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 2
>>> Decimal('1.10') / 3
Decimal('0.37')
>>> Decimal('4.335') / 3
Decimal('1.4')
>>>

Должно же 1.45

Офлайн

#4 Авг. 11, 2016 09:16:07

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Простое математическое округление

не пойму чем вам 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



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Авг. 11, 2016 09:40:09

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Простое математическое округление

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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Авг. 11, 2016 12:50:14

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Простое математическое округление

ZerG
print round(4.335/3, 1) = 1.4
а ТС хочет 1.5.

Офлайн

#7 Авг. 11, 2016 14:14:11

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Простое математическое округление

ТС очевидно забыл что округление идет с лева на право
по последней цыфре
по этому 1.44 = 1.4



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Авг. 11, 2016 15:23:10

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Простое математическое округление

Я хорошо знаю что такое округление в математике.
round не угодил этим:
>>> round(1.5)
2
>>> round(2.5)
2
>>>
По определению он округляет к ближайшему четному числу, это не то что мне нужно.

Офлайн

#9 Авг. 11, 2016 15:31:26

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Простое математическое округление

PooH
Потому, что getcontext().prec = 2 точность представления дробной части урезали до 2 знаков, так что на три делится уже 4.33

Даже если 4.33 делится, то почему не показывает 1.44?

Офлайн

#10 Авг. 11, 2016 15:53:34

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Простое математическое округление

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

Суть в том, что если округлять 1.445 до десятых то это 1.4 а не 1.5 !!!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version