Python - 指数中的位数

nma*_*rov 21 python floating-point exponent

是否可以设置用于打印浮点数指数的位数?我想把它设置为3.

目前,

f = 0.0000870927939438012
>>> "%.14e"%f
'8.70927939438012e-05'
>>> "%0.14e"%f
'8.709279e-005'
Run Code Online (Sandbox Code Playgroud)

我想要打印的是: '8.70927939438012e-005'

Anu*_*yal 20

没有办法控制它,最好的方法是为此编写一个函数

def eformat(f, prec, exp_digits):
    s = "%.*e"%(prec, f)
    mantissa, exp = s.split('e')
    # add 1 to digits as 1 is taken by sign +/-
    return "%se%+0*d"%(mantissa, exp_digits+1, int(exp))

print eformat(0.0000870927939438012, 14, 3)
print eformat(1.0000870927939438012e5, 14, 3)
print eformat(1.1e123, 4, 4)
print eformat(1.1e-123, 4, 4)
Run Code Online (Sandbox Code Playgroud)

输出:

8.70927939438012e-005
1.00008709279394e+005
1.1000e+0123
1.1000e-0123
Run Code Online (Sandbox Code Playgroud)

  • Anurag,有各种方法可以将其作为字符串进行操作并获得指数中的三位数.我感兴趣的是避免字符串操作,因为我的帖子中的第二个例子显示Python本身在某些情况下使用三位数.仍然不确定为什么会这样,因为你也在上面问过.我只是在试验时发现它. (2认同)
  • 我很伤心,这个答案是正确的,如果你可以指定数字位数肯定会很好...几乎downvoted ... (2认同)

Kha*_*oti 8

您可以使用np.format_float_scientific

from numpy import format_float_scientific

f = 0.0000870927939438012

format_float_scientific(f, exp_digits=3) # prints '8.70927939438012e-005'

format_float_scientific(f, exp_digits=5, precision=2) #prints '8.71e-00005'
Run Code Online (Sandbox Code Playgroud)