没有符号的NSNumberFormatter货币?

问题描述 投票:18回答:3

我正在使用NSNumberFormatter从字符串中获取货币值,它运行良好。

我使用此代码执行此操作:

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

但是,它总是在字符串的开头给我一个货币符号。而不是手动形成我给定的字符串,我不能以某种方式让格式化程序不给字符串任何货币符号?

iphone objective-c ipad currency nsnumberformatter
3个回答
60
投票

是的,在设置样式后,您可以调整特定方面:

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


5
投票

使用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")

1
投票

至于斯威夫特语言

let mymoney = 12000

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

let resultString = formatter.stringFromNumber(mymoney)!
© www.soinside.com 2019 - 2024. All rights reserved.