检测当前货币在哪一边
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 从左到右的标记。
如何检查货币符号在哪一边?例如,在美国,符号是这样的:“.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 从左到右的标记。