2015-08-18 3 views
-2

У меня есть цифры, например:Как усечь числа?

100.1264 
9.09 
123 
1298.456789 

, и я хочу, чтобы усечь это:

100.12 
9.09 
123 
1298.45 

Как укоротить эти цифры так, чтобы оставить свою форму?

+0

Что значит «цифры» *? Являются ли они частью строки или номера объектов? Вы хотите, чтобы они * отображались * округлены до 2dp или фактически округлены? И что вы * пробовали до сих пор? Пожалуйста, предоставьте дополнительную информацию. – jonrsharpe

+0

nips вы что-нибудь пробовали? покажите нам, что вы пробовали в качестве кода python. – Ja8zyjits

+0

, пожалуйста, обратитесь к этому ответу, это может вам помочь. [здесь] (http://stackoverflow.com/questions/455612/limiting-floats-to-two-decimal-points) –

ответ

0
s="""100.1264 
9.09 
123 
343.1 
1298.456789""" 
print re.sub(r"(?<=\.)(\d{2})\d+",r"\1",s) 

Если вход поплавок можно использовать

s=100.1264 

print ast.literal_eval(re.sub(r"(?<=\.)(\d{2})\d+",r"\1",str(s))) 
+2

Кастинг в строку, регулярное выражение и преобразование назад (с 'literal_eval', не 'float' ?!) кажется неэффективным по сравнению с, например, 'int (s * 100)/100.0' ... – jonrsharpe

+0

@jonrsharpe round (4.1234) дает' 4.0'? – vks

+0

Да, я понял, что вскоре после комментирования. Как указано в другом месте, «math.trunc» также доступен, и дело в том, что кругосветное путешествие по строке кажется странным способом приблизиться к нему. – jonrsharpe

1

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

import math 
math.trunc(x * 100)/100 

Например:

>>> import math 
>>> x = 100.1264 
>>> math.trunc(x * 100)/100 
100.12 

Вы также можете использовать int вместо math.trunc, однако будьте осторожны, что отливки между поплавками и ints могут быть дорогостоящими.

Дополнительный совет: если вы хотите произвольной точности десятичной арифметики, посмотрите на decimal module.

Смежные вопросы