Я читаю текстовий файл з числами з плаваючою точкою, всі з або 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)