在Python中,科学记数法总是在指数中给出2位数字:
print('%17.8En' % 0.0665745511651039)
6.65745512E-02
但是,我非常希望有3个数字,如:
6.65745512E-002
我们可以在Python中使用内置配置/函数吗?
我知道我的问题基本上是相同的问题:Python -指数中的位数,但这个问题是4年前问的,我不想调用这样的函数上千次。我希望现在应该有更好的解决办法。
不幸的是,您无法更改此默认行为,因为您无法覆盖str
方法。
但是,您可以包装浮点数,并使用__format__
方法:
class MyNumber:
def __init__(self, val):
self.val = val
def __format__(self,format_spec):
ss = ('{0:'+format_spec+'}').format(self.val)
if ( 'E' in ss):
mantissa, exp = ss.split('E')
return mantissa + 'E'+ exp[0] + '0' + exp[1:]
return ss
print( '{0:17.8E}'.format( MyNumber(0.0665745511651039)))
您可以使用自己的格式化器并覆盖format_field
:
import string
class MyFormatter(string.Formatter):
def format_field(self, value, format_spec):
ss = string.Formatter.format_field(self,value,format_spec)
if format_spec.endswith('E'):
if ( 'E' in ss):
mantissa, exp = ss.split('E')
return mantissa + 'E'+ exp[0] + '0' + exp[1:]
return ss
print( MyFormatter().format('{0:17.8E}',0.00665745511651039) )