Десятичные числа округляются при форматировании Python - PullRequest
1 голос
/ 29 мая 2019

Вот что я пробовал:

>>> pi = 3.14159265
>>> format(pi, '.3f') #print 3.142 # 3 precision after the decimal point
'3.142'
>>> format(pi, '.1f') #print 3.1
'3.1'
>>> format(pi, '.10f') #print 3.1415926500, more precision than the original
'3.1415926500'
>>> format(pi, '.5f') #print 3.14159, more precision than the original
'3.14159'
>>> format(pi, '.4f') 
'3.1416'

Часть беспокойства такова:

>>> format(pi, '.3f') #print 3.142 # 3 precision after the decimal point
'3.142'
>>> format(pi, '.4f') 
'3.1416'

Там, где я ожидал получить 3.1415, я получаю 3.1416. Пожалуйста, предложите мне.
SO показывает эти 2 ссылки:
http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate
http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary
Но это не тот, кого я ищу.

Ответы [ 5 ]

4 голосов
/ 29 мая 2019

Это потому, что оно round используется, поэтому оно похоже на функцию round.

Чтобы исправить это:

>>> l = str(pi).split('.')
>>> l[0] + '.' + l[1][:4]
'3.1415'
>>> float(l[0] + '.' + l[1][:4])
3.1415

Версия функции:

def first_n(a, b):
    l = str(a).split('.')
    return int(l[0] + '.' + l[1][:b])

А теперь:

print(first_n(pi, 4))

Дает:

3.1415
1 голос
/ 29 мая 2019

Вы можете попробовать это.Может быть, точно перечислите ответ @ U9-Forward , немного компактный.

>>> str(pi)[:6]
'3.1415'

Надеюсь, это поможет.

1 голос
/ 29 мая 2019

Я не уверен, какое предложение вы хотите, но вот способ урезать число до заданного числа десятичных знаков:

pi = 3.14159265

def truncate(v, places):
    return int(v * 10**places) / 10**places

print(truncate(pi, 3))  # -> 3.141
print(truncate(pi, 4))  # -> 3.1415
1 голос
/ 29 мая 2019

Вы можете просто удалить последний символ:

pi = 3.14159

print(format(pi, '.5f')[:-1]) # 3.1415
0 голосов
/ 29 мая 2019

есть 3.1416 для format(pi, '.4f') по той же причине, что и 3.142 для format(pi, '.3f') - следующая цифра после желаемого количества цифр в форматированном выводе не менее пяти - она ​​округляется в большую сторону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...