NSNumberFormatter 在负值上显示括号[重复]

Posted

技术标签:

【中文标题】NSNumberFormatter 在负值上显示括号[重复]【英文标题】:NSNumberFormatter display brackets on negative values [duplicate] 【发布时间】:2013-08-05 12:07:06 【问题描述】:

我希望格式化程序将 -£4.00 显示为 -£4.00,但它一直显示为 (£4.00),这是为什么呢?

下面的这个函数将字符串“00000014”变成“£00.14”它也应该变成负值。但是数字格式化程序似乎添加了括号。

代码如下:

+(NSString *)pfsCurrencyAmountString:(NSString *)amount CurrencyCodeAsString:(NSString   *)code

if (amount == nil) 
    return nil;


int amountLength = [amount length];
NSMutableString *amountMutable = [NSMutableString stringWithString:amount];

if (amountLength > 2) 
    [amountMutable insertString:@"." atIndex:amountLength - 2];


NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:@"NSNumberFormatterCurrencyStyle"];
[currencyStyle setLocale:locale];
[currencyStyle setCurrencyCode:code];

NSNumber * balance = [currencyStyle numberFromString:amountMutable];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];

return [currencyStyle stringFromNumber:balance];

【问题讨论】:

NSNumberFormatterCurrencyStyle货币值可以是负数:O??? 请先搜索现有答案,然后再询问新答案。 顺便说一句,[currencyStyle setNumberStyle:@"NSNumberFormatterCurrencyStyle"]; 行不正确;使用[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];,就像你稍后所做的那样。 【参考方案1】:

这看起来很奇怪。使用时,

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

它打印在括号中,但如果您使用其他国家的其他标识符,它打印正确。

我可以看到两种方式:

    创建自己的格式化程序:

    [currencyStyle setFormat:@"¤#,##0.00"];

2.另一个不太合适的方法是使用澳大利亚的标识符。它的格式与您需要的相同。

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AU"];

【讨论】:

这是因为您需要将语言环境与数字、日期等因素考虑在内。不幸的是,cocoa 在每个语言环境中所做的事情并没有很好的记录。有些来自 ICU,有些来自 Apple。我建议向 Apple 填写文档错误。 嗯......它与ios8上的pl_PL相同

以上是关于NSNumberFormatter 在负值上显示括号[重复]的主要内容,如果未能解决你的问题,请参考以下文章

NSNumberFormatter 货币符号

如何在Postfix和Infix表示法中接受负值?

NSNumberFormatter 在 NSCFNumber getObjectValue 上泄漏

NSNumberFormatter、NSDecimalNumber 和科学记数法

使用 NSNumberFormatter 循环中的 Objective C 自动释放

NSNumberformatter 将零添加到小数部分