我想更改我的NSNumberformatter,使其显示带有括号的负数,将减号放在前面(或任何本地化的标准)。

我认为我可以用setNegativeFormat:

来做到这一点

但是阅读Apple的哦,如此彻底的文档让我感到头疼:


<强> setNegativeFormat:

设置接收器用于显示负值的格式。

- (void)setNegativeFormat:(NSString *)aFormat

<强>参数 aFormat 一个字符串,指定负值的格式。

<强>状况 适用于iPhone OS 2.0及更高版本。

另见 - negativeFormat

声明 NSNumberFormatter.h


我对aFormat的选择是什么?!?来自Doc Docrs,这里的链接会杀了你吗?

编辑:这里有什么值得宣言:

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

对我来说,保留本地化的货币符号&amp;小数点放置它们可能是什么。因此,[currencyFormatter setNegativeFormat:@&quot; - #,## 0.00&quot;]可能无法正常工作,因为货币缺失,并且不能为所有货币假设2位小数。

有帮助吗?

解决方案

如果您看一下“格式字符串”, 中的部分数据格式编程指南适用于Cocoa

  

格式字符串使用 Unicode技术标准#35 (此参考版本为tr35-6; Mac OS X v10.4的格式化程序使用版本 tr35-4 )。

修改

如果要根据货币设置格式字符串,可以使用&#164; 字符,例如:

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

这将添加当前本地化的货币符号,而不是&#164; 字符。

因此,将相同的概念应用于否定格式字符串:

[formatter setFormat:@"-¤#,##0.00"];

这也将使用货币符号代替当前本地化的&#164;

其他提示

好的,所以我开始工作的答案是:

[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];

关键是这个什么?字符“&#164;”。不知道它叫什么?任何人?但它代表这些格式字符串中的本地化货币......

在这种情况下,它正在寻找格式NSString。 在此处查看格式字符串详细信息

如果您希望 12,345.67 的否定显示为 -12,345.67 ,那么我相信正确的NSString值是 @&quot; - #,## 0.00 &QUOT;

我还注意到上面链接的文件中的以下句子:

  

如果您没有指定格式   负值,指定的格式   使用前面的正值   用减号( - )。

编辑:结果 10.4及之后的更新:这是描述10.4及之后行为的PDF
并且,从该文档链接,这里是
所需的数据格式为10.4及之后
从这个文档看,正确的字符串可能是: @&quot; - #,## 0。##&quot;

给出的所有答案都假设货币是小数点后两位,并且使用逗号作为千位分隔符。很明显,有许多货币不符合这一标准, http://en.wikipedia.org / wiki / Decimal_mark ,所以我使用以下技术

    NSString * formattedBalance = [currencyFormatter stringFromNumber:balance];
    if([formattedBalance rangeOfString:@"("].location != NSNotFound ) {
        formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]];
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top