2014-11-17 20 views
0

我得到的价格在字符串中的对象,我想将它合成为货币。 我使用下面的代码:格式NSString使用NSFormatter

var priceString : NSString = urlDict.objectForKey("price") as NSString 
var formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.locale = NSLocale.currentLocale() 
let priceNumber = formatter.numberFromString(priceString) 

我得到的PRICESTRING数据不错,但priceNumber是nil

如果我试试这个:

var priceNumber : NSNumber = urlDict.objectForKey("price") as NSNumber 

然后也priceNumber是nil

我应该采取什么方法实现字符串格式化的价格?

+0

我只是想你的代码中设置PRICESTRING =“$ 12”,它工作正常,输出是12.在操场上试试 – EridB

+0

@eridb我刚刚在操场上尝试'let priceNumber = formatter.numberFromString(“123456”)'并且返回'nil' – sasquatch

+0

@sasquatch你已经告诉它你正在给它的格式化程序是货币字符串。因此,你需要在开始的$。 (或者任何货币)。作为@Fogmeister提到的 – Fogmeister

回答

2

感谢所有的建议: 我在上面解决方案相结合,形成一个功能:

func formatAsPrice(priceString: NSString) -> NSString { 
    let rsSymbol = "\u{20B9}" // The currency symbol for India 
    var priceStrTemp = priceString 
    priceStrTemp = rsSymbol + priceStrTemp 
    var formatter = NSNumberFormatter() 
    formatter.numberStyle = .CurrencyStyle 
    formatter.locale = NSLocale.currentLocale() 
    formatter.locale = NSLocale(localeIdentifier: "en_IN") //Explicit 
    formatter.secondaryGroupingSize = 2 // grouping as Indian currency style 

    let priceNumber = formatter.numberFromString(priceStrTemp)! 
    var finalPrice: NSString! = (rsSymbol + " \(priceNumber)") as NSString! 

    return finalPrice 

} 
0

格式化程序代码很好。
你要通过正确的货币字符串,货币符号

func format(amount: String) -> NSNumber? { 
    let formatter = NSNumberFormatter() 
    formatter.numberStyle = .CurrencyStyle 
    formatter.locale = NSLocale.currentLocale() 
    return formatter.numberFromString(amount) 
} 
format("NOK 12,00") // returns 12.00 
format("NOK 12") // Also fine 
format("$ 12") // Error, my local currency is NOK (Norwegian krone) 
format("12,00") // Error, needs currency symbol in the string. 

如果你想尝试解析没有货币升华这样"12,00",你应该设置currencySymbol空字符串。像这样

func format(amount: String) -> NSNumber? { 
    let formatter = NSNumberFormatter() 
    formatter.numberStyle = .CurrencyStyle 
    formatter.currencySymbol = "" 
... 
} 

format("12,00") // Works fine now 
+0

我来自印度。什么是正确的货币字符串? 我试过“卢比1234”,但仍然'无' – sasquatch

+0

我认为你的货币代码是“INR”尝试像这种格式(“INR 12,00”) –

+0

不,仍然'零':( 有没有文件指向货币字符串? – sasquatch