Bel*_*dar 2 python floating-point
我想验证一个字符串输入,以验证它是否可以格式化为给定宽度和精度的有效浮点数.
width = 10
precision = 4
value = '12'
try:
"{10.4f}".format(value)
except:
print "not valid"
Run Code Online (Sandbox Code Playgroud)
这个测试失败但它应该有效,因为12可以认为是一个浮点数12.0000
我还想进行动态测试,因为宽度和精度是变量.
谢谢您的帮助!
你忘记了:冒号:
"{:10.4f}".format(float(value))
Run Code Online (Sandbox Code Playgroud)
否则Python将第一个数字解释为位置参数索引.
每个参数都可以使用它自己的占位符进行设置:
"{value:{width}.{precision}f}".format(
value=float(value), width=width, precision=precision)
Run Code Online (Sandbox Code Playgroud)
width并且precision在value格式化之前插入参数.
然而,这对于浮点输入来说不是一个好的测试.浮点值12.234无法准确表示; 二进制分数只能近似它:
>>> format(12.234, '.53f')
'12.23399999999999998578914528479799628257751464843750000'
Run Code Online (Sandbox Code Playgroud)
所以这个值不会"适合"你的10.4约束,但看起来像一个完全有效的输入舍入.
在任何情况下,任何浮点值都可以格式化为固定宽度:
>>> format(10**11 + 0.1, '10.4f')
'100000000000.1000'
Run Code Online (Sandbox Code Playgroud)
没有ValueError将提高; 的10在宽度参数是指:产生一个字符串,它是至少这许多个字符宽,垫用空格,如果它是较短的,并且该宽度包括小数点和小数.
要验证浮点输入,您可以做的最好的事情是测试它是否可以转换为float,然后测试mininum和maxmimum值:
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2544 次 |
| 最近记录: |