这是我的代码:
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 ?我将使用结果作为字符串。
当前回答
除了SG的答案,你还可以使用Decimal模块:
from decimal import Decimal
x = str(Decimal(1) / Decimal(10000))
# x is a string '0.0001'
其他回答
'%f' % (x/y)
但你自己也需要控制精度。例如,
'%f' % (1/10**8)
将只显示0。 细节在文档中
或者对于python3,使用等效的旧格式或新样式格式
您可以使用内置的格式化功能。
>>> a = -3.42142141234123e-15
>>> format(a, 'f')
'-0.000000'
>>> format(a, '.50f') # Or you can specify precision
'-0.00000000000000342142141234122994048466990874926279'
这对任何指数都适用:
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
另一种选择是,如果你正在使用熊猫,并且想要压制所有浮点数的科学计数法,是调整熊猫选项。
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
将浮点数显示为任意数量的有效数字的更简单解决方案。这里不需要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))