您忘记了: 冒号:
"{:10.4f}".format(float(value))
否则 Python 会将第一个数字解释为位置参数索引。
每个参数都可以用它自己的占位符来设置:
"{value:{width}.{precision}f}".format(
value=float(value), width=width, precision=precision)
width 和 precision 参数在 value 格式化之前被插值。
但是,这不是对浮点输入的良好测试。浮点值12.234不能精确表示;二进制分数只能近似它:
>>> format(12.234, '.53f')
'12.23399999999999998578914528479799628257751464843750000'
所以这个值不会“适合”您的 10.4 约束,但在四舍五入时看起来就像一个完全有效的输入。
任何浮点值都可以格式化为固定宽度,在任何情况下:
>>> format(10**11 + 0.1, '10.4f')
'100000000000.1000'
不会提出ValueError;宽度参数中的10 表示:产生一个至少有这么多字符宽度的字符串,如果它更短则用空格填充,并且这个宽度包括小数点点和小数。
要验证浮点输入,最好的办法是测试它是否可以转换为浮点数,然后测试最小值和最大值:
try:
value = float(value)
except ValueError:
# cannot be converted to a valid float
return "Not a valid input"
else:
if 0 <= value < 10 ** 11:
return "Value out of range"