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


144

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

print "%.9f" % numvar

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


2
%确实做到了这一点-%不是打印功能的一部分,而是字符串的一部分-请参阅Python文档
michael_s 2013年

Answers:


177

对于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
选项二应该是newer_method_string = "{:.9f}".format(numvar)-注意:分隔字段和格式的要求。无论如何,我已经在2.7.5上进行了测试。
Caltor

1
对于python 2.6选项,两个应该是newer_method_string = "{0:.9f}".format(numvar)-注意此旧版本的field_name必需为0。
ttq


52

使用round

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

8

格式化不是打印,而是字符串的属性,因此您可以使用

newstring = "%.9f" % numvar

或使用新的样式格式。valueString =“ {:. 9f}”。format(number)
Zaren 2013年

8

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

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

3
如果您愿意使用.format-方法,注意,这也可以通过嵌套参数来完成,像这样:'{:.{n}f}'.format(numvar,n=n)
nivk

2

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

print "%.9f" % numvar

2位数字的返回精度:

print "%.2f" % numvar 

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

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

-2

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

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

2
有什么是高达.主场迎战,?与pauliwago的问题有什么关系?
Peter Mortensen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.