Как превратить число с плавающей точкой, как 293.4662543 в 293.47 в Python? - PullRequest
17 голосов
/ 12 октября 2010

Как сократить полученный результат?Мне нужно только 2 цифры после точки.Извините, я действительно не знаю, как объяснить это лучше на английском ...

Спасибо

Ответы [ 7 ]

38 голосов
/ 12 октября 2010

Из путеводителя с плавающей точкой Python шпаргалка :

"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"

Использование round () - неправильное решение, потому что числа с плавающей запятой двоичные дроби который не может точно представлять десятичные цифры.

Если вам нужно выполнять вычисления с десятичными цифрами, используйте тип Decimal в модуле decimal.

18 голосов
/ 12 октября 2010

Если вам нужен номер, используйте функцию round():

>>> round(12.3456, 2)
12.35

(но +1 для ответа Майкла относительно типа Decimal.)

Если вы хотите строку:

>>> print "%.2f" % 12.34567
12.35
6 голосов
/ 20 февраля 2018

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

def do(*args):
    formattedList = [float("{:.2f}".format(num)) for num in args]
    _result =(sum(formattedList))
    result = round(_result,2)
    return result


print(do(23.2332,45.24567,67,54.27))

Результат:

189.75
6 голосов
/ 12 октября 2010

От: Документы Python раунд (x [, n]) Вернуть значение с плавающей запятой x, округленное до n цифр после десятичной точки. Если n опущено, по умолчанию используется ноль. Результатом является число с плавающей запятой. Значения округляются до ближайшего кратного 10 к степени минус n; если два мультипликатора одинаково близки, округление выполняется вдали от 0 (например, раунд (0.5) равен 1,0, а раунд (-0,5) равен -1,0).

Примечание Поведение функции round () для чисел с плавающей точкой может быть удивительным: например, раунд (2.675, 2) дает 2,67 вместо ожидаемых 2,68. Это не ошибка: это результат того факта, что большинство десятичных дробей не могут быть представлены точно как число с плавающей точкой. См. Арифметика с плавающей запятой: проблемы и ограничения для получения дополнительной информации.

Похоже, раунд (293.466 .... [, 2]) сделает это,

5 голосов
/ 12 октября 2010

x = round(293.4662543, 2)

3 голосов
/ 12 октября 2010
>>> print "%.2f" % 293.44612345
293.45
1 голос
/ 06 января 2017

Если вам нужны такие числа, как 2.3k или 12M , эта функция выполнит свою работу:

def get_shortened_integer(number_to_shorten):
    """ Takes integer and returns a formatted string """
    trailing_zeros = floor(log10(abs(number_to_shorten)))
    if trailing_zeros < 3:
        # Ignore everything below 1000
        return trailing_zeros
    elif 3 <= trailing_zeros <= 5:
        # Truncate thousands, e.g. 1.3k
        return str(round(number_to_shorten/(10**3), 1)) + 'k'
    elif 6 <= trailing_zeros <= 8:
        # Truncate millions like 3.2M
        return str(round(number_to_shorten/(10**6), 1)) + 'M'
    else:
        raise ValueError('Values larger or equal to a billion not supported')

Результаты:

>>> get_shortened_integer(2300)
2.3k # <-- str

>>> get_shortened_integer(1300000)
1.3M # <-- str
...