将浮点数转换为特定精度后复制到字符串
我有一个浮点数,比如说 135.12345678910
。我想把这个数字和一个字符串连接起来,但只想要 135.123456789
这个部分。用打印的方式,我可以很简单地做到这一点,比如:
print "%.9f" % numvar
这里的 numvar
就是我最开始的那个数字。有没有什么简单的方法可以做到这一点呢?
8 个回答
61
使用 round
函数:
>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
78
Python 3.6
为了让大家更明白,你可以使用 f-string 格式化。这种方式的语法和 format
方法几乎一样,但看起来更简洁一些。
举个例子:
print(f'{numvar:.9f}')
想了解更多关于新 f-string 的内容,可以看看这些链接:
- Python 3.6 新特性(和上面的链接是一样的)
- PEP 官方文档
- Python 官方文档
- 一篇很不错的博客 - 也讲了性能问题
这里有一个关于各种测试方法执行时间的图表(来自上面的最后一个链接):
250
在Python 3之前的版本(比如2.6或2.7),有两种方法可以实现这个功能。
# Option one
older_method_string = "%.9f" % numvar
# Option two
newer_method_string = "{:.9f}".format(numvar)
不过要注意,对于Python 3及以上的版本(比如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的回答,这种方法是非常快的。