【问题标题】:convert exponential to decimal in python在python中将指数转换为十进制
【发布时间】:2010-12-07 01:58:36
【问题描述】:

我在 python 中有一个数组,其中包含一组值,其中一些是

2.32313e+07

2.1155e+07

1.923e+07

11856

112.32

如何将指数格式转换为十进制格式

补充:在 UNIX 中使用 awk 打印时,有没有办法可以将指数直接转换为十进制?

【问题讨论】:

  • 您要转换为表示具有一定精度的浮点数的字符串吗?
  • 是的。并且精度可以是任意数字
  • 任何数字是什么意思?你知道这个号码吗?
  • 该数字取决于我从中提取此信息的文件类型。我会事先知道这个数字
  • 查看这个最近的问题以获得类似的问题和有趣的解决方案:stackoverflow.com/questions/1566936/…

标签: python unix awk exponent


【解决方案1】:

我想你有一个列表而不是一个数组,但在这里它并没有太大的区别;在 2.6 及更早版本的 Python 中,类似于:

>>> L = [2.32313e+07, 2.1155e+07, 1.923e+07, 11856, 112.32]
>>> for x in L: print '%f' % x
... 
23231300.000000
21155000.000000
19230000.000000
11856.000000
112.320000

在 2.6 或更高版本中,.format 方法。我想你知道数字本身,作为数字,不是任何“格式”——它是您通过格式化数字获得的 strings,例如用于输出,采用某种格式。顺便说一句,%f 的变体可以让您控制小数位数、宽度、对齐方式等——如果没有您的进一步规范,很难准确地建议您可能想要什么。

在awk中,可以使用printf

【讨论】:

    【解决方案2】:

    您可以使用 locale.format() 格式化您的数字以进行输出。这具有额外的好处,即与数字表示中可能预期的任何特定于语言环境的约定保持一致。如果您想在执行输出的特定位置完全控制,最好使用 print "format" % vars... variant

    例子:

    >>> import locale 
    >>> locale.setlocale(locale.LC_ALL, "")
    'C/UTF-8/C/C/C/C'
    >>> locale.format("%f", 2.32313e+07, 1)
    '23231300.000000'
    

    【讨论】:

      【解决方案3】:

      在回答您问题的最后一部分时,awk 可以使用相同的printf 格式:

      awk '{printf "%f\n",$1}' exponential_file
      

      exponential_file 包含的位置:

      2.32313e+07
      2.1155e+07
      1.923e+07
      11856
      112.32
      

      您可以将其转换为变量以供以后使用。这是一个简单的例子:

      awk '{n = sprintf("%f\n",$1); print n * 2}' exponential_file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-24
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        相关资源
        最近更新 更多