2016-03-07 28 views
0

我試圖將字符串轉換爲CGFloat數字。 如果等於0,我的代碼將刪除最後一位數字。Swift 2 - 向CGFloat添加十進制0

如何防止切出零點?

let str = "17.30" 

let flt = CGFloat((str as NSString).doubleValue) + 2.0 

print(flt) // 19.3 -- should be 19.30 
+0

你是不是想保留原來的字符串中使用的精確度(小數點後的數字),或者你總是想用2個小數格式化結果? – Stefan

+0

我試圖格式總是結果2小數 – SNos

+0

@SNOS如果你想轉換爲字符串的數字,使用'NSNumberFormatter'。 – Sulthan

回答

4

CGFloat不能做到這一點,轉換浮動回String

print(String(format: "%.2f", flt)) // 19.30 
1

CGFloat只是一個數字(所以17.317.30是它的值相同);你真正擔心的是如何設置CGFloat號碼的String表示。

作爲替代@vadian:■解決方案,你可以使用一個NSNumberFormatter的如下

/* Your CGFloat example */ 
let str = "17.30" 
let flt = CGFloat((str as NSString).doubleValue) + 2.0 

/* Use NSNumberFormatter to display your CGFloat 
    with exactly 2 fraction digits. */ 
let formatter = NSNumberFormatter() 
formatter.maximumFractionDigits = 2 
formatter.minimumFractionDigits = 2 
print(formatter.stringFromNumber(flt)!) 
    /* 19.30 */ 
+1

'?? 「」在這種情況下毫無意義,你想在轉換失敗時提出異常(因爲它永遠不會發生),而不是默默吞下它。我會用'!'。 – Sulthan

+2

@Sulthan你是對的;源於我的(這裏:可能是壞的)習慣,在回答SO問題時避免使用'!',因爲害怕錯誤地教導某人使用'!'在不適當的情況下解包。有了這兩條評論,希望這裏不是這樣,謝謝指出! – dfri