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

时间:2016-08-27 19:03:45

标签: python scientific-notation exponent

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

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

但是,我非常希望有3位数字,如:

6.65745512E-002

我们可以使用Python内置的配置/功能吗?

我知道我的问题与Python - number of digits in exponent基本上是同一个问题,但这个问题是在4年前提出来的,而且我不想将这样的函数称为千次。我希望现在应该有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

很遗憾,您无法更改此默认行为,因为您无法覆盖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)))

答案 1 :(得分:0)

您可以使用自己的格式化程序并覆盖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) )

[    
$objWorksheet = $objPHPExcel->getActiveSheet();


    foreach ($objWorksheet->getRowIterator() as $row) {

        $cellIterator = $row->getCellIterator();

        $cellIterator->setIterateOnlyExistingCells(false);
        foreach ($cellIterator as $cell) {
            if($cell->getRow()==1||$cell->getColumn()=='A'){
                continue;
            }
            else{
                $cell->$_column;
            }

        }


    }][1]