NSNumberFormatter絕對是最好的選擇!您可以在NSNumberFormatter上設置一個NSLocale,格式化程序將根據該語言環境自動運行。數字格式化程序的默認區域設置始終是用戶所選區域格式的貨幣。
NSDecimalNumber *someAmount = [NSDecimalNumber decimalNumberWithString:@"5.00"];
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLog(@"%@", [currencyFormatter stringFromNumber:someAmount]);
這將根據用戶默認區域格式記錄金額'5.00'。如果你想改變你可以設置的貨幣:
NSLocale *aLocale = [[NSLocale alloc] initWithLocaleIdentifier: "nl-NL"]
[currencyFormatter setLocale:aLocale];
這將選擇該區域設置的默認貨幣。
雖然您不是以用戶的本地貨幣收費,而是收費。要強制NSNumberFormatter
在貨幣格式,同時保持用戶的偏好的數字格式,使用方法:
currencyFormatter.currencyCode = @"USD"
currencyFormatter.internationalCurrencySymbol = @"$"
currencyFormatter.currencySymbol = @"$"
在EN-US作爲$5.00
在NL-NL這是$ 5,00
這將格式化。
這就是我的想法。我很好奇當用戶在將someAmount歸檔到磁盤後更改其語言環境時會發生什麼情況。 iPhone可以很容易地在另一個國家出差。如果用戶對本地語言感到滿意,他們可能會更改語言環境。當這個對象被解除存檔時會發生什麼?它會顯示爲創建和打算的「$ 5.00」,或者顯示爲「¥5」,顯然,它具有明顯不同的貨幣價值,但是當currencyFormatter的區域設置爲日本時,格式正確的NSDecimalNumber爲「5.00」。 – Meltemi 2009-05-13 16:32:54
您可以存儲格式化或無格式的someAmount。如果將其格式化存儲,金額將始終反映其製作幣種。如果將其存儲爲未格式化,格式化程序將只將其格式化爲當前的區域設置,但不會進行任何轉換!因此:'$ 5.00'將變成'¥5'。我在我的應用程序中做的是存儲未格式化的貨幣和它的區域設置。通過這種方式,我總是可以確定貨幣是在其生成的區域中進行格式化的,但我也可以稍後添加貨幣轉換。 – klaaspieter 2009-05-14 08:40:31
只是通過c/p'ing此代碼,我得到的警告:格式不是字符串文字和沒有格式參數 我能不能得到這個? – oberbaum 2010-01-19 14:59:36