如何在Python中压缩科学记数法?

这是我的代码:

x = 1.0 y = 100000.0 print x/y 

我的商数显示为1.00000e-05

有没有办法压制科学记数法,使其显示为0.00001 ? 如何将科学记数法转换为float

提前致谢。
这有点可笑,但我还没有想出办法。 我将使用结果作为一个string。

 '%f' % (x/y) 

但是你需要自己pipe理精确度。 例如,

 '%f' % (1/10**8) 

将只显示零。
细节在文档中

或者对于Python 3来说,等效的旧格式或更新的样式格式

使用较新版本的Python(2.6及更高版本),您可以使用''.format()来完成@SilentGhost的build议:

 '{0:f}'.format(x/y) 

使用新版本''.format (还要记住要显示的数字后面的数字,这取决于浮点数是多less)。 看到这个例子:

 >>> a = -7.1855143557448603e-17 >>> '{:f}'.format(a) '-0.000000' 

如上所示,默认值是6位! 这对我们的案例是没有帮助的,所以我们可以使用这样的东西:

 >>> '{:.20f}'.format(a) '-0.00000000000000007186' 

更新

从Python 3.6开始,可以使用新的带格式的string来简化,如下所示:

 >>> f'{a:.20f}' '-0.00000000000000007186' 

除了SG的回答之外,您还可以使用Decimal模块:

 from decimal import Decimal x = str(Decimal(1) / Decimal(10000)) # x is a string '0.0001' 

这将适用于任何指数:

 def getExpandedScientificNotation(flt): 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('.', '') return return_val 

这是使用黄瓜队长的答案 ,但有2个补充。

1)允许函数获得非科学的数字符号,只是返回它们(所以你可以投入很多的input,一些数字是0.00003123 vs 3.123e-05,仍然有function的工作。

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 

如果它是一个string然后使用内置的float进行转换,例如: print( "%.5f" % float("1.43572e-03"))回答: 0.00143572