усечение питона после сотен? - PullRequest
11 голосов
/ 09 июня 2009

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

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

Ответы [ 8 ]

13 голосов
/ 09 июня 2009

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

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

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

>>> round(315.15321531321, 2)
315.14999999999998

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

7 голосов
/ 07 марта 2014

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

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

rounded   = 315.16
truncated = 315.15
6 голосов
/ 09 июня 2009

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

2 голосов
/ 09 июня 2009

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

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

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

from math import trunc
value = trunc(value*100)/100
1 голос
/ 09 июня 2009

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

1 голос
/ 09 июня 2009

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

>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998
0 голосов
/ 02 марта 2017

Может быть, это вам поможет:

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

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

0 голосов
/ 07 января 2015

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

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

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

...