如何在python中强制使用前导点打印指数数字?

时间:2014-02-06 08:57:02

标签: python string-formatting exponential

我正在尝试在python中打印指数数字,但我需要我的数字以点开头。类似的东西:

>>>print( "{:+???}".format(1.2345678) )
+.1234e+01

3 个答案:

答案 0 :(得分:1)

这是一种令人难以置信的令人作呕的方式:

import numpy as np
num = 1.2345678
print str(num/10**(int(np.log10(num))+1)).lstrip('0')+'e{0}'.format(str((int(np.log10(num))+1)).zfill(2))

>>>.123456768e01

这是一种更好的方法(我认为):

import re
num = 1.2345678
m_ = re.search('([0-9]*)[.]([0-9]*)', str(num))
print('.{0}e+{1}'.format(m_.group(1)+m_.group(2), str(len(m_.group(1))).zfill(2)))

>>>.123456768e+01

如果您将任一输出字符串转换为:

float(output_string)

你得到原始号码。

答案 1 :(得分:1)

如果您将数字乘以10并使用科学计数法格式化数字,您将获得正确的指数,但昏迷将被放错地方。幸运的是,你知道标志只有一个字符,而昏迷前只有一个数字。所以你可以做到

def format_exponential_with_leading_dot(n):
    a = "{:+e}".format(n * 10)
    return a[0] + '.' + a[1] + a[3:]


>>> print format_exponential_with_leading_dot(1.2345678)
+.1234568e+01

答案 2 :(得分:0)

使用负数并且可以使用负指数

import math
num = -0.002342
print '{}.{}e{}{}'.format('+' if num >= 0 else '-', str(abs(num)).replace('.','').lstrip('0'), '+' if abs(num) >= 1 else '-', str(abs(int(math.log10(abs(num)) + (1 if abs(num) > 1 else 0)))).zfill(2))