检测当前货币所在的一侧

时间:2015-06-11 02:00:49

标签: ios objective-c nsnumberformatter

如何检查货币符号位于哪一侧?例如,在美国,符号将是这样的:“$56.58”,但在法国,它将是这样的:“56.58€”。那么我怎么能够检测它是在右侧还是左侧?

NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setLocale:[NSLocale currentLocale]];

1 个答案:

答案 0 :(得分:4)

如果您只想将数字格式化为货币,请将格式化程序的numberStyle设置为NSNumberFormatterCurrencyStyle,然后使用其stringFromNumber:方法。

如果出于某种原因,您确实想知道格式化程序区域设置格式中货币符号的位置,可以向格式化程序询问其positiveFormat并查找字符¤ (U + 00A4货币符号)。

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterCurrencyStyle;

f.locale = [NSLocale localeWithLocaleIdentifier:@"en-US"];
NSLog(@"%@ format=[%@] ¤-index=%lu", f.locale.localeIdentifier, f.positiveFormat,
    (unsigned long)[f.positiveFormat rangeOfString:@"\u00a4"].location);

f.locale = [NSLocale localeWithLocaleIdentifier:@"fr-FR"];
NSLog(@"%@ format=[%@] ¤-index=%lu", f.locale.localeIdentifier, f.positiveFormat,
    (unsigned long)[f.positiveFormat rangeOfString:@"\u00a4"].location);

f.locale = [NSLocale localeWithLocaleIdentifier:@"fa-IR"];
NSLog(@"%@ format=[%@] ¤-index=%lu", f.locale.localeIdentifier, f.positiveFormat,
    (unsigned long)[f.positiveFormat rangeOfString:@"\u00a4"].location);

结果:

2015-06-10 21:27:09.807 commandline[88239:3716428] en-US format=[¤#,##0.00] ¤-index=0
2015-06-10 21:27:09.808 commandline[88239:3716428] fr-FR format=[#,##0.00 ¤] ¤-index=9
2015-06-10 21:27:09.808 commandline[88239:3716428] fa-IR format=[‎¤#,##0] ¤-index=1

请注意,在fa-IR情况下,符号不是格式字符串中的第一个或最后一个字符。第一个字符(索引为零)是不可见的。这是U + 200E LEFT-TO-RIGHT MARK。