Подтвердить что ты не робот

Усечение десятичного значения в Python

Я пытаюсь усечь десятичное значение в Python. Я не хочу округлять его, но вместо этого просто показываю десятичные значения до указанной точности. Я попробовал следующее:

d = 0.989434
'{:.{prec}f}'.format(d, prec=2)

Это округляет до 0.99. Но я действительно хочу, чтобы выход был 0,98. Очевидно, что round() не вариант. Есть какой-либо способ сделать это? Или мне нужно вернуться к коду и изменить все на decimal?

Спасибо.

4b9b3361

Ответ 1

Я не знаю всех ваших требований, но это будет довольно надежным.

>> before_dec, after_dec = str(d).split('.')
>> float('.'.join((before_dec, after_dec[0:2])))
0.98

2018-01-03 edit

Этот ответ не является надежным или математически правильным. Смотрите Nilani Algiriyage ответ ниже для правильного способа сделать это с помощью метода Decimal.quantize.

Ответ 2

Вы можете использовать следующий код

import decimal
d = 0.989434

print decimal.Decimal(d).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)

Ответ 3

Отформатируйте его на что-то намного дольше, а затем отключите дополнительные цифры:

def truncate(f, digits):
    return ("{:.30f}".format(f))[:-30+digits]

Ответ 4

Это лучший способ, которым я верю.

  • Переместите значимые цифры влево
  • Усечение десятичной части
  • Переместите количество цифр, перемещенных влево, вправо

    d = 0.989434
    print "{0:0.2f}".format(int(d * 100)/100.0)
    

    Выход

    0.98
    

Ответ 5

d = 0.989434
print floor(d * 100) / 100

Math.floor(x) Возвращает пол x как float, наибольшее целое число значение меньше или равно x.

Перемещение 2 десятичных знака слева от десятичного ".", настил, затем перемещение чисел справа от "."

100 может быть изменен на

n = 2
m = pow (10, n)
d = 0.989434
print floor(d * m) / m

n - ваша желаемая точность.

EDIT: В случае отрицательного значения d вы должны использовать метод ceil

if d < 0:
    print ceil(d * m) / m
else:
    print floor(d * m) / m

Ответ 6

import math

d = 0.989434
prec = 2
output = math.floor(d * (10 ** prec)) / (10 ** prec)

Если вам по-прежнему нужна десятичная переменная вместо строки

Ответ 7

Довольно похожи на некоторые другие ответы, но без импорта

def truncate(x, d):
    return int(x*(10.0**d))/(10.0**d)

>>>truncate(0.987654, 2)
0.98

Ответ 8

Также с математикой:

d = 0.989434
x = int(d * 100.0) / 100.0
print "{0:0.2f}".format(x)

Ответ 9

В этом случае приведенный ниже код будет печатать 0.98, хотя вам нужно быть осторожным, чтобы ваше значение d не становилось больше или равно 10, поскольку оно будет печататься, например, 10,1, а не 10.12.

d = 0.989434
print '{:.{prec}s}'.format(str(d), prec=4)

Ответ 10

с str:

d = str(0.989434)
print float(d[:d.find('.')+3])

Ответ 11

Если вам нужно только отобразить, вы можете преобразовать его в строку и нарезать его:

d = 0.989434
print str(d)[0:4] #or print(str(d)[0:4])

Ответ 12

В этой ссылке здесь Я разместил решение ниже:

def truncate_number(f_number, n_decimals):
      strFormNum = "{0:." + str(n_decimals+5) + "f}"
      trunc_num = float(strFormNum.format(f_number)[:-5])
      return(trunc_num)

# Testing the 'trunc_num()' function
test_num = 1150/252
[(idx, truncate_number(test_num, idx)) for idx in range(0, 20)]

В режиме аренды не требуется загружать какой-либо модуль и не требует новых вычислений. До сих пор он решил мою проблему с требованиями усечения в расчетах цен на публичные облигации.