我有一个浮点数,想限制为两位小数。
我尝试过format()和round(),但仍然只能得到0或0.0
x = 8.972990688205408e-05
print ("x: ", x)
print ("x using round():", round(x))
print ("x using format():"+"{:.2f}".format(x))
output:
x: 8.972990688205408e-05
x using round(): 0
x using format():0.00
我期望的是8.98或8.97,具体取决于所使用的方法。我想念什么?
答案 0 :(得分:2)
您正在使用科学计数法。正如glhr在评论中指出的那样,您正在尝试舍入8.972990688205408e-05 = 0.00008972990688205408
。这意味着尝试舍入为float类型将仅在小数点后打印前两个0
,结果为0.00
。您将必须通过0:.2e
进行格式化:
x = 8.972990688205408e-05
print("{0:.2e}".format(x))
此打印:
8.97e-05
您在评论之一中询问如何仅获得8.97。 这是这样做的方法:
y = x*1e+05
print("{0:.2f}".format(y))
输出:
8.97
答案 1 :(得分:1)
如果我理解正确,您只想舍入尾数/有效位数?如果要将x
保留为float
并输出float
,只需在调用round
时指定精度:
x = round(8.972990688205408e-05,7)
输出:
8.97e-05
但是,我建议首先将x
与decimal
module进行转换,这“为快速正确舍入的十进制浮点算术提供支持”(请参见this answer):
from decimal import Decimal
x = Decimal('8.972990688205408e-05').quantize(Decimal('1e-7')) # output: 0.0000897
print('%.2E' % x)
输出:
8.97E-05
或者使用format
方法的缩写形式,该方法给出相同的输出:
print(f"{x:.2E}")
答案 2 :(得分:1)
在python(和许多其他编程语言)中,任何带数字后缀e
的数字都是10的幂。
例如
8.9729e05 = 8.9729 x 10^3 = 8972.9
8.9729e-05 = 8.9729 x 10^-3 = 0.000089729
8.9729e0 = 8.9729 x 10^0 = 8.9729
8.972990688205408e-05 8.972990688205408 x 10^-5 = 0.00008972990688205408
8.9729e # invalid syntax
正如其他答案所指出的那样,如果要打印出指数舍入,则需要使用正确的Python string format,您有很多选择。即
e Floating point exponential format (lowercase, precision default to 6 digit)
e Floating point exponential format (uppercase, precision default to 6 digit).
g Same as "e" if exponent is greater than -4 or less than precision, "f" otherwise
G Same as "E" if exponent is greater than -4 or less than precision, "F" otherwise
例如
x = 8.972990688205408e-05
print('{:e}'.format(x)) # 8.972991e-05
print('{:E}'.format(x)) # 8.972991E-05
print('{:.2e}'.format(x)) # 8.97e-05
(更新)
OP提出了一种删除指数“ E”的方法。因为str.format()或“%”表示法只是输出一个字符串对象,所以打破字符串中的“ e”表示法就可以了。
'{:.2e}'.format(x).split("e") # ['8.97', '-05']
print('{:.2e}'.format(x).split('e')[0]) # 8.97
答案 3 :(得分:0)
rount() returns closest multiple of 10 to the power minus ndigits,
因此您不可能获得8.98或8.97。您也可以检查here。