问题:将浮点数转换为一定精度,然后复制到字符串
我说一个浮点数135.12345678910
。我想将该值连接到一个字符串,但只想要135.123456789
。使用打印,我可以通过执行以下操作轻松地做到这一点:
print "%.9f" % numvar
用numvar
我的原始号码。是否有捷径可寻?
回答 0
对于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文档中有关字符串格式的链接。
有关选项一的更多信息,此链接就足够了,并且具有有关各种标志的信息。
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的答案以获取更多信息,但是这种方法很快。
回答 1
Python 3.6
为了清楚起见,您可以使用f字符串格式。它的语法几乎与format
方法相同,但是要更好一些。
例:
print(f'{numvar:.9f}')
有关新f字符串的更多信息:
- Python 3.6的新增功能(与上述相同的链接)
- PEP官方文档
- Python官方文档
- 真的很好的博客文章-也谈到性能
这是各种测试方法的执行时间的图表(来自上面的最后链接):
回答 2
使用round
:
>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
回答 3
格式化不是打印,而是字符串的属性,因此您可以使用
newstring = "%.9f" % numvar
回答 4
如果精度直到运行时才知道,此其他格式设置选项很有用:
>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
回答 5
要使用9位数字设置精度,请获取:
print "%.9f" % numvar
2位数字的返回精度:
print "%.2f" % numvar
2位数字的返回精度和浮点转换值:
numvar = 4.2345
print float("%.2f" % numvar)
回答 6
该str
函数有一个错误。请尝试以下方法。您将看到“ 0,196553”,但正确的输出是“ 0,196554”。因为该str
函数的默认值为ROUND_HALF_UP。
>>> value=0.196553500000
>>> str("%f" % value).replace(".", ",")