2016-03-07 71 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