168

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

print "%.9f" % numvar

numvar我的原始号码。是否有捷径可寻?

4

7 回答 7

219

对于 Python < 3(例如 2.6 [见评论] 或 2.7),有两种方法可以做到这一点。

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

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

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

有关选项二的更多信息,我建议使用 Python 文档中关于字符串格式的链接

有关选项一的更多信息,这个链接就足够了,并且有关于各种标志的信息

Python 3.6(2016 年 12 月正式发布),增加了f字符串字面量,更多信息请看这里,扩展了str.format方法(使用大括号这样f"{numvar:.9f}"解决了原来的问题),即

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

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

于 2013-03-07T05:36:58.387 回答
74

蟒蛇 3.6

为了清楚起见,您可以使用f 字符串格式。这与该方法具有几乎相同的语法format,但使其更好一点。

例子:

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

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

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

执行时间

于 2017-03-16T12:25:17.457 回答
58

使用round

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
于 2013-03-07T05:33:41.720 回答
12

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

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
于 2015-08-17T07:04:56.657 回答
8

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

newstring = "%.9f" % numvar
于 2013-03-07T05:19:29.423 回答
2

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

print "%.9f" % numvar

返回精度为 2 位:

print "%.2f" % numvar 

返回具有 2 位数字和浮点转换值的精度:

numvar = 4.2345
print float("%.2f" % numvar) 
于 2018-01-18T08:13:35.297 回答
-2

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

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")
于 2015-11-09T16:33:08.773 回答