这是我的代码:
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 ?我将使用结果作为字符串。
当前回答
使用新版本”。格式(还记得指定后面有多少位数字。你希望显示的,这取决于浮点数有多小)。请看这个例子:
>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'
如上所示,默认是6位数!这对我们的案例没有帮助,所以我们可以使用这样的代码:
>>> '{:.20f}'.format(a)
'-0.00000000000000007186'
更新
从Python 3.6开始,可以使用新的格式化字符串字面值进行简化,如下所示:
>>> f'{a:.20f}'
'-0.00000000000000007186'
其他回答
除了SG的答案,你还可以使用Decimal模块:
from decimal import Decimal
x = str(Decimal(1) / Decimal(10000))
# x is a string '0.0001'
如果它是一个字符串,那么使用内置的float对其进行转换,例如: 打印(“%。5f" %浮动("1.43572 -03")) 答案:0.00143572
由于这是谷歌上的顶部结果,我将在这里发布失败后,为我的问题找到一个解决方案。如果你想格式化一个浮点对象的显示值,并让它保持一个浮点,而不是一个字符串,你可以使用这个解决方案:
创建一个新类,用于修改浮点值的显示方式。
from builtins import float
class FormattedFloat(float):
def __str__(self):
return "{:.10f}".format(self).rstrip('0')
您可以通过更改{:f}中的整数值来自己修改精度。
这是黄瓜船长的答案,但有两个补充。
1)允许函数获得非科学表示法的数字,并按原样返回它们(因此您可以抛出大量输入,其中一些数字是0.00003123 vs 3.123e-05,但函数仍然可以工作。
2)增加对负数的支持。(在原始函数中,负数将从-1.08904e-05变为0.0000-108904)
def getExpandedScientificNotation(flt):
was_neg = False
if not ("e" in flt):
return flt
if flt.startswith('-'):
flt = flt[1:]
was_neg = True
str_vals = str(flt).split('e')
coef = float(str_vals[0])
exp = int(str_vals[1])
return_val = ''
if int(exp) > 0:
return_val += str(coef).replace('.', '')
return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
elif int(exp) < 0:
return_val += '0.'
return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
return_val += str(coef).replace('.', '')
if was_neg:
return_val='-'+return_val
return return_val
使用3.6.4时,我遇到了一个类似的问题,当使用这个时,输出文件中的一个数字将被科学符号格式化:
fout.write('someFloats: {0:0.8},{1:0.8},{2:0.8}'.format(someFloat[0], someFloat[1], someFloat[2]))
我所要做的就是添加'f'来修复它:
fout.write('someFloats: {0:0.8f},{1:0.8f},{2:0.8f}'.format(someFloat[0], someFloat[1], someFloat[2]))