Найти - Пользователи
Полная версия: округление числа с плавающей точкой вниз с заданной точностью
Начало » Python для новичков » округление числа с плавающей точкой вниз с заданной точностью
1
amateur
round(number) округляет с заданной точность к ближайшему.
А как округлить число с плавающей точкой вниз с заданной точностью?
py.user.next
Можешь домножить на 10000, взять только целую часть, а потом поделить на 10000 обратно.
JOHN_16
Либо воспользоваться модулем decimal. quantize и ROUND_DOWN помогут
Rodegast
> А как округлить число с плавающей точкой вниз с заданной точностью?

Как-то так:
 from math import floor
>>> floor(2.75)
2.0
def floor2(n, m):
     return round(floor(n)+round(n - floor(n), m), m)

> Либо воспользоваться модулем decimal.

В этом модуле сидит ловушка:
 >>> from decimal import Decimal, getcontext
>>> getcontext().prec = 2
>>> Decimal("22") / Decimal("7")
Decimal('3.1')
>>> Decimal("220") / Decimal("7")
Decimal('31')
Т.е. его автор является столь одарённым человеком что он решил задавать точность вычислений не как количество знаков после запятой, а как количество знаков в числе. К тому же он ещё может и считать не правильно:
 >>> 220*7
1540
>>> getcontext().prec = 2
>>> int(Decimal("220") * Decimal("7"))
1500
>>> int(Decimal("221.5") * Decimal("7"))
1600
Это происходит из-за того же кривого округления. Decimal хранит свои значения как экспоненциальное число: 220 * 7 это 1,54E3 и Decimal округляет его до 1,5E3 отсюда и ошибка.
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