2013-03-07 69 views
77

我有一个浮点数,比如135.12345678910。我想将该值连接到一个字符串,但只想要135.123456789。拥有打印,我可以很容易地做这样的事情做到这一点:将浮点数转换为某个精度,然后复制到字符串

print "%.9f" % numvar 

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

+1

%正是这样做 - %不是打印函数的一部分,而是字符串 - 请参阅[Python文档](http://docs.python.org/2/library/stdtypes.html#string-formatting-operations) – 2013-03-07 05:21:14

回答

97

与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),方案(2)​​3210。

有关选项二的更多信息,我建议this link on string formatting from the python docs

对于选项一的更多信息,this link will suffice and has info on the various flags

UPDATE:Python的3.6(以2016年12月正式发布),将添加f字符串文字,see more info here,它扩展了str.format方法(使用大括号,使得f"{numvar:.9f}"解决原来的问题)。

+1

旧式格式仍然适用于3.2 – 2013-03-07 05:49:35

+1

选项二应该是'newer_method_string =“{:.9f}”。format(numvar)' - 注意所需的':'分隔字段和格式。无论如何,我已经在2.7.5上测试过了。 – Caltor 2013-11-04 14:29:18

+1

对于python 2.6选项二应该是'newer_method_string =“{0:.9f}”.format(numvar)' - 注意这个旧版本的field_name所需的0。 – ttq 2016-10-26 15:26:02

6

这不是打印,做的格式,这是字符串的属性,所以你可以只使用

newstring = "%.9f" % numvar 
+0

或者使用新风格格式。格式(数字) – Zaren 2013-03-07 05:40:06

21

使用轮:

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

如果精度是未知的,直到运行时,这个其他格式选项是有用的:

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

STR函数具有错误。请试试这个。您将看到'0,196553',但正确的输出是'0,196554'。原因str函数默认值为ROUND_HALF_UP。

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

要设置精度具有9个数字,得到:

print "%.9f" % numvar 

返回精度与2个位数:

print "%.2f" % numvar 

返回精度与2位和float转换值:

numvar = 4.2345 
print float("%.2f" % numvar) 
相关问题