这是我的代码:
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
?我将把结果用作字符串。
使用更新版本的''.format
(还要记得指定你想显示多少位小数,这取决于浮点数有多小)。看下面的例子:
>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'
如上所示,默认为6位数!这对我们的案例不是很有帮助,因此我们可以使用类似以下的内容:
>>> '{:.20f}'.format(a)
'-0.00000000000000007186'
从Python 3.6开始,可以使用新的格式化字符串字面值来简化操作,示例如下:
>>> f'{a:.20f}'
'-0.00000000000000007186'
f"{a:.{precision}f}"
。 - Aziz Altotime.time() #shortStuff end = time.time() print( '{:.20}'.format(end - start),"sec")
- Xanlantos{:.20}
,而是 {:.20f}
。 - Jeyekomon''.format()
}}来实现@SilentGhost建议的功能。'{0:f}'.format(x/y)
f'{x/y:f}'
[f'{x:f}' for x in long_list]
>>> print('{:f}'.format(0.000000123))
0.000000
- duality_'{0:.10f}'
- nmichaels如果您正在使用pandas并希望对所有浮点数禁用科学计数法,另一种选择是调整pandas选项。
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
import pandas as pd import numpy as np pd.options.display.float_format = '{:.2f}'.format np.set_printoptions(suppress=True)
- Elias上面的大多数答案需要您指定精度。但是如果您想以这种方式显示浮点数,即没有不必要的零:
1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001
numpy
有一个解决方案:np.format_float_positional
import numpy as np
def format_float(num):
return np.format_float_positional(num, trim='-')
对于numpy数组,您可以使用suppress命令来抑制
import numpy as np
np.set_printoptions(suppress=True)
format
函数。>>> a = -3.42142141234123e-15
>>> format(a, 'f')
'-0.000000'
>>> format(a, '.50f') # Or you can specify precision
'-0.00000000000000342142141234122994048466990874926279'
format(0.001, '.50f') = '0.00100000000000000002081668171172168513294309377670'
。 - SurpriseDog这将适用于任何指数:
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
这是使用Captain Cucumber的回答,但有两个添加。
1)允许函数获取非科学计数法数字并将它们直接返回(可以输入很多数字,其中一些数字为0.00003123 vs 3.123e-05,函数仍然能够运行)。
2)增加了负数的支持。(在原始函数中,负数将变成0.0000-108904而不是-1.08904e-05)
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
由于这是谷歌搜索的前几个结果,我在找不到解决方法之后才来发布问题。如果您想格式化浮点对象的显示值,并使其保持为浮点数而非字符串,则可以使用以下解决方案:
创建一个新类,修改浮点值的显示方式。
from builtins import float
class FormattedFloat(float):
def __str__(self):
return "{:.10f}".format(self).rstrip('0')
您可以通过更改{:f}
中的整数值来自行修改精度。
options(scipen = 999)
一样。 - Leonardo Siqueiranumpy
模块提供了np.format_float_positional()
,这个函数非常好用。 - D.L.replace(",", "")
结合使用,https://stackoverflow.com/questions/67879685/python-decimal-decimal-producing-result-in-scientific-notation比现有的任何答案都要好。 - Brendano257