Python усекает после сотен?

Как можно усекать ввод, например, 315.15321531321 Я хочу усечь все значения после сотых позиций, чтобы он стал 315.15

как это сделать?

Ответ 1

Форматирование строки под python 2.x должно сделать это за вас:

>>> print '%.2f' % 315.15321531321
315.15

Это ограничивает представление строки всего двумя десятичными знаками. Обратите внимание: если вы используете round(315.153215, 2), вы получите другое значение float, которое естественно неточно (или переоценено, в зависимости от того, как вы на него смотрите):

>>> round(315.15321531321, 2)
315.14999999999998

Технически, round() является правильным, но он не "усекает" результаты по вашему запросу в 315.15. Кроме того, если вы округлите значение, например 315,157, оно произведет что-то ближе к 315.16... не уверен, что это означает "обрезать".

Ответ 2

Похоже, печать "%.2f" также округляется. Вот код Python, который округляет и обрезает

num = 315.15627
print "rounded   = %.2f" % num
print "truncated = %.2f" % (int(num*100)/float(100))

rounded   = 315.16
truncated = 315.15

Ответ 3

Если вы работаете с суммой валют, я настоятельно рекомендую вместо этого использовать десятичный класс Python: http://docs.python.org/library/decimal.html

Ответ 4

Если вы хотите уменьшить его, вы можете использовать флаг формирования "%f":

value = 315.123123123
print "Value is: %.2f" % value

Если вы хотите действительно отрезать "дополнительные" цифры, сделайте что-нибудь вроде:

from math import trunc
value = trunc(value*100)/100

Ответ 5

Встроенная функция round():

>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998

Ответ 6

У вас есть несколько вариантов: вы можете округлить число, используя round(), однако это может привести к некоторым неточностям (например, 315.15 может округлить до 315.150000003). Если вы просто хотите усечь значение float при его отображении, вы можете указать ширину вывода с помощью printf ( "%. 2f", mynumber). Это, вероятно, лучшее решение, поскольку, не зная больше о вашем конкретном приложении, хорошая идея в целом сохранить всю длину номера для расчета.

Ответ 7

При работе с типами Decimal и валютой, где сумма должна быть точной, вот что я придумал для усечения до центов (сотых):

amount = Decimal(long(amount * 100)) / Decimal(100)

Немного истории. Я пробовал quantize, но он имеет тенденцию округлять, а не обрезать. И я не мог с чистой совестью использовать дорогие струнные формы для чего-то такого простого. И, наконец, я не хотел никаких проблем с точностью a la float, поэтому я использую очень специфическое литье, которое, вероятно, будет излишним.

Ответ 8

Возможно, это поможет вам:

a=315.15321531321
a=a*100
a=int(a)
a=a/100.0
print(a)
315.15

Объяснение: Если вы хотите округлить во втором десятичном разряде, вам необходимо:
1. умножьте свой номер на 100; это дает вам 31515.321531321,
2. преобразовать это новое число в целое; int (31515.321531321) дает вам 31515,
3. разделите это на 100.0; 31515/100,0,
4. и вы получите правильный ответ; 315,15

Наслаждайтесь!