将浮点数转换为某个精度,然后复制到字符串

我有一个浮点数,比如 135.12345678910。我想将该值连接到一个字符串,但只想要 135.123456789。通过打印,我可以很容易地做到这一点,比如:

print "%.9f" % numvar

numvar是我的原始号码。有什么简单的方法吗?

360972 次浏览

格式不是打印出来的,而是字符串的属性,所以你可以直接使用

newstring = "%.9f" % numvar

使用 round:

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

对于 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) ,选项2是 更喜欢

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

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

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’s 的答案获得更多信息,但是这个方法是 很快

如果直到运行时才知道精度,那么下面这个格式选项非常有用:

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

str函数有一个错误。请尝试以下操作。您将看到’0,196553’,但是正确的输出是’0,196554’。因为 str函数的默认值是 ROUNDHALF _ UP。

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

Python 3.6

为了清楚起见,您可以使用 F 弦格式。这与 format方法的语法几乎相同,但是使它更好一些。

例如:

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

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

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

execution times

若要设置9位数字的精度,请获取:

print "%.9f" % numvar

返回精度为2位:

print "%.2f" % numvar

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

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