检测当前货币在哪一边

Detect which side the current currency is on

如何检查货币符号在哪一边?例如,在美国,符号是这样的:“.58”,但在法国它是这样的:“56.58€”。那么我如何才能检测到它是在右侧还是左侧?

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

如果您只想将数字格式化为货币,请将格式化程序的 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 从左到右的标记。