繁体   English   中英

字符串格式:以0开头的科学计数法表示正数,以-开头。 负数

[英]String format: Start scientific notation with 0. for positive number, with -. for negative number

我想使用固定的指数格式来格式化数字列表:

0.xxxxxxxxxxxxEsee

如果数字为负数,则应将0替换为0:

-.xxxxxxxxxxxxEsee

我可以使用格式字符串完成此操作吗? 例如

output.write('{:+016.10E}{:+016.10E}{:+016.10E}\n'.format(a,b,c))

效果很好,但没有满足零下垂要求,并且也给出了前导0.

示例输出为

-.704411727284E+00-.166021493805E-010.964452299466E-020.229380762349E-07
-.103417103118E-05-.269314547877E-040.140398741573E-020.000000000000E+00
0.000000000000E+00-.704410110737E+00-.166019042695E-010.964139641580E-02
-.196412061468E-070.125311265867E-050.269427086293E-04-.140464403693E-02
0.000000000000E+000.000000000000E+00-.496237902548E-020.505395880357E-03
-.332217159196E-02-.192047286272E-030.139005979401E-02-.146291733047E-03
0.947012666403E-030.000000000000E+000.000000000000E+00-.496237514486E-02
0.505449126498E-03-.332395118617E-020.192048881658E-03-.139035528110E-02

这个怎么样?

import re

# "fix" a number in exponential format
def fixexp(foo):
  # shift the decimal point
  foo = re.sub(r"(\d)\.", r".\1", foo)
  # add 0 for positive numbers
  foo = re.sub(r" \.",    r"0.",  foo)
  # increase exponent by 1
  exp = re.search(r"E([+-]\d+)", foo)
  newexp = "E{:+03}".format(int(exp.group(1))+1)
  foo = re.sub(r"E([+-]\d+)", newexp, foo)
  return foo

nums = [ -0.704411727284, -1.66021493805, 0.00964452299466, 0.0000000229380762349, -0.00000103417103118, -0.0000269314547877, 0.00140398741573 ]

# print the numbers in rows of 4
line = ""
for i in range(len(nums)):
  num = "{:18.11E}".format(nums[i])
  num = fixexp(num)
  line += num
  if (i%4 == 3 or i == len(nums)-1):
    print line
    line = ""

输出:

-.704411727284E+00-.166021493805E+010.964452299466E-020.229380762349E-07
-.103417103118E-05-.269314547877E-040.140398741573E-02

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM