如何在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