【问题标题】:Convert floating point number to a certain precision, and then copy to string将浮点数转换为一定精度,然后复制为字符串
【发布时间】:2013-02-22 04:52:33
【问题描述】:

我有一个浮点数,比如135.12345678910。我想将该值连接到一个字符串,但只想要135.123456789。使用打印,我可以通过执行以下操作轻松做到这一点:

print "%.9f" % numvar

numvar 是我的原始号码。有没有简单的方法可以做到这一点?

【问题讨论】:

  • % 正是这样做的 - % 不是打印功能的一部分,而是字符串的一部分 - 请参阅Python docs

标签: python string floating-point


【解决方案1】:

使用 Python

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

但请注意,对于高于 3 的 Python 版本(例如 3.2 或 3.3),选项二是 preferred

关于选项二的更多信息,我建议this link on string formatting from the Python documentation

有关选项一的更多信息,this link will suffice and has info on the various flags

Python 3.6(2016 年 12 月正式发布),添加了f 字符串字面量see more information here,它扩展了str.format 方法(使用花括号,f"{numvar:.9f}" 解决了原来的问题),即是,

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

解决问题。查看@Or-Duan 的答案以获取更多信息,但此方法快速

【讨论】:

  • 选项二应该是newer_method_string = "{:.9f}".format(numvar) - 请注意所需的: 以分隔字段和格式。反正我已经在 2.7.5 上测试过了。
  • 对于 python 2.6 选项二应该是 newer_method_string = "{0:.9f}".format(numvar) -- 注意这个旧版本的 field_name 所需的 0。
  • 我希望有效数字不只是根据{v.:3f} 盲目截断 t。如何获得重要数字?
  • @CharlieParker 我建议使用指数表示法,例如{:12.5e}。文档的这一小节中还有更多内容 (docs.python.org/2/library/…)。
【解决方案2】:

Python 3.6

为了清楚起见,您可以使用f-string 格式。这与format 方法的语法几乎相同,但要更好一些。

例子:

print(f'{numvar:.9f}')

更多关于新 f 字符串的阅读:

这是各种测试方法的执行时间图(来自上面的最后一个链接):

【讨论】:

  • 是否有指定精度的语法不是9?
  • @MinhNghĩa 只需将9 更改为您想要的任何数字
  • 我的意思是任意精度,比如n
  • 您的意思是在运行时计算的动态数字吗?如果是这样,您将不得不使用round
【解决方案3】:

使用round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'

【讨论】:

    【解决方案4】:

    如果直到运行时才知道精度,这个其他格式化选项很有用:

    >>> n = 9
    >>> '%.*f' % (n, numvar)
    '135.123456789'
    

    【讨论】:

    • 如果您更喜欢使用.format-方法,请注意,这也可以通过嵌套参数来完成,如下所示:'{:.{n}f}'.format(numvar,n=n)
    【解决方案5】:

    格式化的不是打印,它是字符串的属性,所以你可以使用

    newstring = "%.9f" % numvar
    

    【讨论】:

    • 或者使用新的样式格式。 valueString ="{:.9f}".format(number)
    【解决方案6】:

    要设置 9 位精度,请获取:

    print "%.9f" % numvar
    

    返回 2 位精度:

    print "%.2f" % numvar 
    

    返回2位精度和浮点转换值:

    numvar = 4.2345
    print float("%.2f" % numvar) 
    

    【讨论】:

      【解决方案7】:

      str 函数有一个错误。请尝试以下方法。您将看到“0,196553”,但正确的输出是“0,196554”。因为str函数的默认值为ROUND_HALF_UP。

      >>> value=0.196553500000 
      >>> str("%f" % value).replace(".", ",")
      

      【讨论】:

      • ., 是怎么回事?它与 pauliwago 的问题有什么关系?
      • @PeterMortensen 我认为使用列表分隔符(又名逗号:,)作为小数分隔符是一个令人困惑的欧洲标准
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2015-12-19
      • 1970-01-01
      • 2011-11-25
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多