簡體   English   中英

沒有符號的NSNumberFormatter貨幣?

[英]NSNumberFormatter Currency Without Symbol?

我正在使用NSNumberFormatter從字符串中獲取貨幣值,它運行良好。

我使用此代碼執行此操作:

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

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

是的,在設置樣式后,您可以調整特定方面:

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

使用Swift 5, NumberFormatter有一個名為currencySymbol的屬性。 currencySymbol有以下聲明:

var currencySymbol: String! { get set }

接收方使用的字符串作為本地貨幣符號。

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


以下Playground示例代碼顯示如何使用空符號設置貨幣格式樣式:

import Foundation

let amount = 12000

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

let result = formatter.string(for: amount)
print(String(describing: result)) // prints: Optional("12,000.00")

至於斯威夫特語言

let mymoney = 12000

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

let resultString = formatter.stringFromNumber(mymoney)!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM