这是我的代码:
x = 1.0
y = 100000.0
print x/y
我的商显示为1.00000e-05。
有没有办法压制科学符号,让它显示为 0.00001 ?我将使用结果作为字符串。
这是我的代码:
x = 1.0
y = 100000.0
print x/y
我的商显示为1.00000e-05。
有没有办法压制科学符号,让它显示为 0.00001 ?我将使用结果作为字符串。
当前回答
由于这是谷歌上的顶部结果,我将在这里发布失败后,为我的问题找到一个解决方案。如果你想格式化一个浮点对象的显示值,并让它保持一个浮点,而不是一个字符串,你可以使用这个解决方案:
创建一个新类,用于修改浮点值的显示方式。
from builtins import float
class FormattedFloat(float):
def __str__(self):
return "{:.10f}".format(self).rstrip('0')
您可以通过更改{:f}中的整数值来自己修改精度。
其他回答
在Python的新版本(2.6及更高版本)中,你可以使用" .format()来完成@SilentGhost建议的事情:
'{0:f}'.format(x/y)
使用新版本”。格式(还记得指定后面有多少位数字。你希望显示的,这取决于浮点数有多小)。请看这个例子:
>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'
如上所示,默认是6位数!这对我们的案例没有帮助,所以我们可以使用这样的代码:
>>> '{:.20f}'.format(a)
'-0.00000000000000007186'
更新
从Python 3.6开始,可以使用新的格式化字符串字面值进行简化,如下所示:
>>> f'{a:.20f}'
'-0.00000000000000007186'
对于numpy数组,可以使用suppress命令as进行抑制
import numpy as np
np.set_printoptions(suppress=True)
除了SG的答案,你还可以使用Decimal模块:
from decimal import Decimal
x = str(Decimal(1) / Decimal(10000))
# x is a string '0.0001'
将浮点数显示为任意数量的有效数字的更简单解决方案。这里不需要numpy或列表推导式:
def sig(num, digits=3):
"Return number formatted for significant digits"
if num == 0:
return 0
negative = '-' if num < 0 else ''
num = abs(float(num))
power = math.log(num, 10)
if num < 1:
step = int(10**(-int(power) + digits) * num)
return negative + '0.' + '0' * -int(power) + str(int(step)).rstrip('0')
elif power < digits - 1:
return negative + ('{0:.' + str(digits) + 'g}').format(num)
else:
return negative + str(int(num))
在示例中,我去掉了后面的0并显示完整的整数:sig(31415.9) = 31415而不是31400。如果您不喜欢修改代码,请随意修改。
测试:
for power in range(-8,8):
num = math.pi * 10**power
print(str(num).ljust(25), sig(num))