/ / Python 3 Float Десяткові точки / точність - python, python-3.x, з плаваючою точкою

Python 3 Float Decimal Points / Точність - python, python-3.x, плаваюча точка

Я читаю текстовий файл з числами з плаваючою точкою, всі з або 1 або 2 десятковими точками. я використовую float() перетворити рядок у поплавок і підняти a ValueError якщо це не вдасться. Я зберігаю всі поплавки у списку. Під час друку, я б хотів роздрукувати його у вигляді 2-х десяткових знаків з плаваючою точкою.

Припустимо, у мене є текстовий файл з номерами -3,65, 9,17, 1. Я читаю кожен з них, і як тільки я перетворюю їх у плаваюче і додаю їх до списку. Тепер в Python 2, виклик float(-3.65) повертає -3.65. У Python 3, однак, float(-3.65) returns-3.6499999999999999`, який втрачає свою точність.

Я хочу надрукувати список поплавців, [-3.6499999999999999, 9.1699999999999999, 1.0] з двома десятковими точками. Роблячи щось на зразок "%.1f" % round(n, 1) поверне рядок. Як я можу повернути список всіх двох десяткових точок поплавців, а не рядків? До сих пір я його об'їздив [round(num, 2) for num in list] але потрібно було б встановити десяткові точки / точність замість round().

Відповіді:

16 за відповідь № 1

Одним словом, ви можете "t.

3.65 не може бути представлена ​​саме як float. Номер, який ви отримуєте, є найближчим номером 3.65 що має точний float представництво

Різниця між (старше?) Python 2 і 3 пов'язана виключно з типовим форматуванням.

Я бачу наступні як у Python 2.7.3, так і в 3.3.0:

In [1]: 3.65
Out[1]: 3.65

In [2]: "%.20f" % 3.65
Out[2]: "3.64999999999999991118"

Для точного десяткового типу даних див decimal.Decimal.


24 за відповідь № 2

Найпростішим способом зробити це можна, використовуючи круглу вставку.

round(2.6463636263,2) буде відображатися як 2.65.


16 за відповідь № 3

У коментарях говориться, що метою є друкувати до 2 знаків після коми.

У Python 3 є проста відповідь:

>>> num=3.65
>>> "The number is {:.2f}".format(num)
"The number is 3.65"

або еквівалентно f-рядкам (Python 3.6+):

>>> num = 3.65
>>> f"The number is {num:.2f}"
"The number is 3.65"

Як завжди, значення float є наближенням:

>>> "{}".format(f)
"3.65"
>>> "{:.10f}".format(f)
"3.6500000000"
>>> "{:.20f}".format(f)
"3.64999999999999991118"

Я думаю, що більшість випадків використання захоче працювати з поплавцями і тільки тоді друкувати до певної точності.

Ті, що хочуть самі цифри для збереження точно до двох десяткових цифр точності, я пропоную використовувати десятковий знак тип Більше читання на точності з плаваючою точкою для тих, хто зацікавлений.


1 для відповіді № 4

Спробуйте зрозуміти через це нижче функцію, використовуючи python3

def floating_decimals(f_val, dec):
prc = "{:."+str(dec)+"f}" #first cast decimal as str
print(prc) #str format output is {:.3f}
return prc.format(f_val)


print(floating_decimals(50.54187236456456564, 3))

Вихід: 50.542

Сподіваюся, це допоможе вам!


0 для відповіді № 5

Спробуйте це:

num = input("Please input your number: ")

num = float("%0.2f" % (num))

print(num)

Я вважаю, що це набагато простіше. Використовується для знаків після десяткового знака %0.1f. Використовується для двох знаків після коми %0.2f і так далі.

Або, якщо ви хочете зменшити його до 2 рядків:

num = float("%0.2f" % (float(input("Please input your number: "))))
print(num)