/ / format (): ValueError: Прецизността не е позволена в спецификатора за цялостен формат - python, string, python-3.x

format (): ValueError: Прецизността не е позволена в спецификатора за цял формат - python, string, python-3.x

Аз съм питон newbie.I съм просто запознаване с формат метод.

От книга, която чета, за да науча питон

What Python does in the format method is that it substitutes each argument
value into the place of the specification. There can be more detailed specifications
such as:
decimal (.) precision of 3 for float "0.333"
>>> "{0:.3}".format(1/3)
fill with underscores (_) with the text centered
(^) to 11 width "___hello___"
>>> "{0:_^11}".format("hello")
keyword-based "Swaroop wrote A Byte of Python"
>>> "{name} wrote {book}".format(name="Swaroop", book="A Byte of Python")

В интерпретатора на питона, ако опитам

print("{0:.3}".format(1/3))

Той дава грешката

 File "", line 24, in
ValueError: Precision not allowed in integer format specifier

Отговори:

6 за отговор № 1

За да отпечатате числа с плаваща запетая, трябва да имате поне един от входовете като плувки, като този

print("{0:.3}".format(1.0/3))

Ако и двата входа са цели числа на оператора на деление, върнатият резултат също ще бъде в int, като десетичната част се съкращава.

продукция

0.333

Можете да конвертирате данните с плаващ float такава функция

data = 1
print("{0:.3}".format(float(data) / 3))

6 за отговор № 2

По-добре е да добавите f:

In [9]: print("{0:.3f}".format(1/3))
0.000

по този начин можете да забележите това 1/3 дава цяло число и след това коригирайте това 1./3 или 1/3. .


2 за отговор № 3

Струва си да се отбележи, че тази грешка ще се случи само в Python 2. В python 3 делението винаги връща float.

Можете да повторите това с from __future__ import division изявление в Python 2.

~$ python
Python 2.7.6
>>> "{0:.3}".format(1/3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Precision not allowed in integer format specifier
>>> from __future__ import division
>>> "{0:.3}".format(1/3)
"0.333"