Как можно усекать ввод, например, 315.15321531321 Я хочу усечь все значения после сотых позиций, чтобы он стал 315.15
как это сделать?
Как можно усекать ввод, например, 315.15321531321 Я хочу усечь все значения после сотых позиций, чтобы он стал 315.15
как это сделать?
Форматирование строки под 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... не уверен, что это означает "обрезать".
Похоже, печать "%.2f" также округляется. Вот код Python, который округляет и обрезает
num = 315.15627
print "rounded = %.2f" % num
print "truncated = %.2f" % (int(num*100)/float(100))
rounded = 315.16
truncated = 315.15
Если вы работаете с суммой валют, я настоятельно рекомендую вместо этого использовать десятичный класс Python: http://docs.python.org/library/decimal.html
Если вы хотите уменьшить его, вы можете использовать флаг формирования "%f"
:
value = 315.123123123
print "Value is: %.2f" % value
Если вы хотите действительно отрезать "дополнительные" цифры, сделайте что-нибудь вроде:
from math import trunc
value = trunc(value*100)/100
Встроенная функция round()
:
>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998
У вас есть несколько вариантов: вы можете округлить число, используя round(), однако это может привести к некоторым неточностям (например, 315.15 может округлить до 315.150000003). Если вы просто хотите усечь значение float при его отображении, вы можете указать ширину вывода с помощью printf ( "%. 2f", mynumber). Это, вероятно, лучшее решение, поскольку, не зная больше о вашем конкретном приложении, хорошая идея в целом сохранить всю длину номера для расчета.
При работе с типами Decimal
и валютой, где сумма должна быть точной, вот что я придумал для усечения до центов (сотых):
amount = Decimal(long(amount * 100)) / Decimal(100)
Немного истории. Я пробовал quantize
, но он имеет тенденцию округлять, а не обрезать. И я не мог с чистой совестью использовать дорогие струнные формы для чего-то такого простого. И, наконец, я не хотел никаких проблем с точностью a la float
, поэтому я использую очень специфическое литье, которое, вероятно, будет излишним.
Возможно, это поможет вам:
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
Наслаждайтесь!