[英]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.