2016-08-19 3 views
0

У меня есть переменная mn, чье значение +2,71989011072, я использую круглую функцию питона, чтобы получить точность значение 2.720, но я получаю 2,72 толькочисла с плавающей точкой точности питона

mn=2.71989011072 
print round(mn,3) 

Дает 2,72, а не 2,720

+0

это _is_ точно +2,72000000000000 (и т.д.), вы ищете заявление для печати форматировать по-разному? –

+0

Да, я пытаюсь получить распечатку заявления 2.720, а не 2.72. Извините, если я смутил вас – Shantam

+4

@WillMolter: На самом деле это не так: число, представленное в десятичном формате на 2,72, не может быть представлено точно в двоичной с плавающей запятой. – user2357112

ответ

3

Да, печать функция применяется второе округление.

mn = 2.71989011072 
mn = round(mn, 3) 
print(mn) 

Вы получите:

2.72 

Вы должны использовать отформатированную строку:

print("{0:.3f}".format(mn)) 

Вы получите:

2.720 

Обратите внимание, что отформатированный строка может сделать округление для вас. При этом, вы получите тот же результат:

mn = 2.71989011072 
print("{0:.3f}".format(mn)) 
# => 2.720 
+0

См. Также: http://stackoverflow.com/questions/15263597/convert-floating-point-number-to-certain-precision-then-copy-to-string –

+0

Это сработало, спасибо человеку – Shantam

1

Функция округляет до трех первых цифр, которые правильно приводит к 2,72. Нули - это вопрос печати и форматирования строки, а не округления.

Чтобы распечатать его с тремя нулями, вам нужно будет сделать следующее:

print '{0:.3f}'.format(round(mn, 3)) 

Это будет первый номер раунда, а затем распечатать его, форматирование с тремя нулями.

0

Требуется конкретное строковое представление числа, а не другое число.

Использование format() вместо round():

>>> mn = 2.71989011072 
>>> format(mn, '.3f') 
'2.720' 
Смежные вопросы