Python 科学记数法中的指数数字

exponent digits in scientific notation in Python

在Python中,科学记数法总是给我2位指数:

print('%17.8E\n' % 0.0665745511651039)
6.65745512E-02

但是,我非常想要像这样的 3 位数字:

6.65745512E-002

我们可以使用 Python 中的内置 configuration/function 来做到这一点吗?

我知道我的问题基本上是同一个问题:Python - number of digits in exponent,但这个问题是 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) )