Подтвердить что ты не робот

NSNumberFormatter Валюта Без Символа?

Я использую NSNumberFormatter, чтобы получить значение валюты из строки, и это работает хорошо.

Я использую этот код для этого:

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

Тем не менее, он всегда дает мне символ валюты в начале строки. Вместо того, чтобы делать это вручную, формируя мою заданную строку, могу ли я как-нибудь сделать так, чтобы форматировщик не дал строке какой-либо символ валюты?

4b9b3361

Ответ 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