NSNumberFormatter Валюта Без Символа?
Я использую NSNumberFormatter, чтобы получить значение валюты из строки, и это работает хорошо.
Я использую этот код для этого:
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]];
Тем не менее, он всегда дает мне символ валюты в начале строки. Вместо того, чтобы делать это вручную, формируя мою заданную строку, могу ли я как-нибудь сделать так, чтобы форматировщик не дал строке какой-либо символ валюты?
Ответы
Ответ 1
Да, после установки стиля вы можете настроить конкретные аспекты:
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!
Ответ 2
В 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")
Ответ 3
как для языка Swift
let mymoney = 12000
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.currencySymbol = ""
formatter.locale = NSLocale.currentLocale()
let resultString = formatter.stringFromNumber(mymoney)!
Ответ 4
Немного подправлю @Imanou Petit answer.
let myDouble = 9999.99
let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = ""
// localize to your grouping and decimal separator
currencyFormatter.locale = Locale.current
// We'll force unwrap with the !, if you've got defined data you may need more error checking
let priceString = currencyFormatter.string(from: NSNumber(value: myDouble))!
print(priceString) // Displays 9,999.99 without the currency & not as Optional