2013-03-07 109 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) 
相關問題