Ограничение числа с плавающей запятой до двух десятичных знаков - PullRequest
1384 голосов
/ 18 января 2009

Я хочу, чтобы a было округлено до 13,95 .

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

Функция round работает не так, как я ожидал.

Ответы [ 24 ]

2 голосов
/ 28 апреля 2019

Как насчет лямбда-функции, подобной этой:

arred = lambda x,n : x*(10**n)//1/(10**n)

Таким образом, вы могли бы просто сделать:

arred(3.141591657,2)

и получите

3.14
1 голос
/ 26 августа 2015

Для округления числа до разрешения лучше всего подходит следующий способ, который может работать с любым разрешением (0,01 для двух десятичных знаков или даже для других шагов):

>>> import numpy as np
>>> value = 13.949999999999999
>>> resolution = 0.01
>>> newValue = int(np.round(value/resolution))*resolution
>>> print newValue
13.95

>>> resolution = 0.5
>>> newValue = int(np.round(value/resolution))*resolution
>>> print newValue
14.0
0 голосов
/ 01 июня 2019

Использовать комбинацию десятичного объекта и метода round ().

Python 3.7.3
>>> from decimal import Decimal
>>> d1 = Decimal (13.949999999999999) # define a Decimal
>>> d1 
Decimal('13.949999999999999289457264239899814128875732421875')
>>> d2 = round(d1, 2) # round to 2 decimals
>>> d2
Decimal('13.95')
0 голосов
/ 31 декабря 2015

Я использую метод нарезки строк. Это относительно быстро и просто.

Сначала преобразуйте число с плавающей точкой в ​​строку, выберите желаемую длину.

float = str(float)[:5]

В приведенной выше строке мы преобразовали значение в строку, а затем сохранили строку только до первых четырех цифр или символов (включительно).

Надеюсь, это поможет!

...