2012-09-20 62 views
17

我正在使用NSNumberFormatter從字符串中獲取貨幣值,它工作正常。NSNumberFormatter沒有符號的貨幣?

我使用此代碼這樣做:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
    [nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]]; 

然而,它總是讓我在字符串的開頭貨幣符號。而不是手動形成我給定的字符串,我不能以某種方式讓格式化程序不給字符串任何貨幣符號?

任何幫助表示讚賞,謝謝。

+0

記住,它不會永遠是在開始 - 對於歐元的價格,你會碰到這樣的12,34€ – ATV

回答

57

是的,你設置樣式後,你可以調整具體方面:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[nf setCurrencySymbol:@""]; // <-- this 
NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:[textField text]]; 
NSString *price = [nf stringFromNumber:number]; 

正如一些建議,你應該使用一個數字格式化讀取字符串值,特別是當用戶正在進入它(如你的代碼所建議的那樣)。在這種情況下,如果用戶輸入特定於語言環境的格式文本,則通用的-floatValue-doubleValue類型的方法不會給您截斷的數字。另外,您應該使用-doubleValue將用戶輸入的文本(貨幣)中的浮點數轉換爲浮點數。關於國際化的WWDC'12開發者會議視頻中有更多關於此的信息。

編輯:在示例代碼中使用NSDecimalNumber來表示用戶輸入的數字。它仍然沒有做適當的驗證,但比原始代碼更好。謝謝@Mark

+0

爲了錢你可能想使用NSDecimalNumber而不是兩倍,所以你沒有舍入問題 – Mark

+0

@Mark是的,我同意,我實際上將編輯原始代碼來做到這一點。 –

0

爲雨燕語言

let mymoney = 12000 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencySymbol = "" 
formatter.locale = NSLocale.currentLocale() 

let resultString = formatter.stringFromNumber(mymoney)! 
2

與SWIFT 3,NumberFormatter有一個名爲currencySymbol屬性。 currencySymbol具有以下聲明:

var currencySymbol: String! { get set } 

使用由接收器作爲本地貨幣符號的字符串。

因此,如果您的格式化樣式需要,您可以將此屬性設置爲空的String


下面的遊樂場代碼顯示瞭如何用一個空符號設置你的貨幣格式風格:

import Foundation 

let amount = 12000 

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.currencySymbol = "" 
formatter.locale = Locale(identifier: "en_US") // set only if necessary 

let result = formatter.string(for: amount) 
//let result = formatter.string(from: NSNumber(value: amount)) // also works 

print(String(describing: result)) 
// prints Optional("12,000.00")