【问题标题】:Convert number to string scientific notation fixed length将数字转换为字符串科学记数法固定长度
【发布时间】:2014-05-29 19:32:24
【问题描述】:

我有一个普通的浮点数,例如“1234.567”或“100000”。我想将它转换为一个字符串,这样精度是固定的,并且数字是科学记数法的。例如,使用 5 位数字,结果将分别为“1.2346e003”和“1.0000e005”。如果可以,内置的十进制数 -> 字符串函数会将其四舍五入,因此即使我想要更多的数字。这是不可取的,因为我需要所有数字都是相同的长度

有没有一种“pythonic”的方式来做到这一点,而无需求助于复杂的字符串操作?

【问题讨论】:

    标签: python string format


    【解决方案1】:
    precision = 2
    number_to_convert = 10000
    print "%0.*e"%(precision,number_to_convert)
    

    这是你要求的吗?

    【讨论】:

      【解决方案2】:

      您可以使用 %e 字符串格式化程序:

      >>> '%1.5e'%1234.567
      '1.23457e+03'
      
      >>> "%1.5e"%100000
      '1.00000e+05'
      

      %x.ye 其中 x = 最小字符数和 y = 最大精度。

      【讨论】:

      • 啊,你在我发布之前修复了它......(+1)
      • 是的,无论出于何种原因,我都错过了相同长度的部分。一切都很好。
      【解决方案3】:

      如果您需要像示例中一样保留 3 位指数,您可以定义自己的函数。这是一个改编自this answer的例子:

      def eformat(f, prec, exp_digits):
          s = "%.*e"%(prec, f)
          mantissa, exp = s.split('e')
          return "%se%0*d"%(mantissa, exp_digits, int(exp))
      
      >>> print eformat(1234.567, 4, 3)
      1.2346e003
      

      【讨论】:

      • 是的,三位数很好,因为 1e200 不长于 1e20。
      猜你喜欢
      • 1970-01-01
      • 2019-04-22
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多