【问题标题】:wrong decimal separator with NSDecimalNumber in iOSiOS中的NSDecimalNumber错误的小数分隔符
【发布时间】:2012-02-01 09:44:03
【问题描述】:

我尝试通过以下方式输出带有正确小数分隔符的十进制数的描述:

NSString* strValue = @"9.94300";
NSDecimalNumber* decimalNumber = [NSDecimalNumber decimalNumberWithString: strValue];    
NSLocale* locale = [NSLocale currentLocale];
NSLog(@"%@", [locale localeIdentifier]);
NSLog(@"%@", [decimalNumber descriptionWithLocale: locale] );

输出是:

de_DE
9.943

小数点分隔符应该是 ',' 而不是 '.'对于这个语言环境。错误在哪里?如何根据本地输出正确的小数分隔符?

【问题讨论】:

  • 非常令人费解。我假设您正在运行 iOS 5(我可以在哪里重现)?在 4.3 模拟器中,代码运行良好并按预期输出 9,943。这甚至可能是一个错误......
  • 补充:NSNumber 做正确的事,而 NSDecimalNumber 在 iOS 5 上没有。现在提交错误报告 ;-) [也许 NSNumber 是你的替代品?]

标签: ios separator nsdecimalnumber nslocale


【解决方案1】:

@TriPhoenix:是的,我正在运行 iOS 5。

@Vignesh:非常感谢。如果我将 iPhone 语言设置为德语,以下代码现在可以工作:

NSString* strValue = @"9.94300";
NSDecimalNumber* decimalNumber = [NSDecimalNumber decimalNumberWithString: strValue];    
NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSLog(@"%@", [numberFormatter stringFromNumber: decimalNumber] );

输出是: 9,943

但现在我遇到了另一个问题。如果我将 iPhone 语言切换回英语,输出仍然是 9,943 而不是 9.943。我做错了吗?

【讨论】:

  • 有谁能帮忙吗?
  • 您想将“区域设置”设置为德语以获取逗号,而不是语言
  • 我想根据 iPhone 的语言输出数字的小数分隔符,即如果 iPhone 设置为德语,则输出“9,943”,如果 iPhone 设置为英语,则输出“9.943”。
  • iPhone 中有两个设置:“区域设置”控制日期和数字格式。 “语言”控制使用的词。
  • 解决了。抱歉,我是 iPhone 的新手,没有注意到第二个设置。非常感谢,奥拉夫。
【解决方案2】:

你可以用这个:

NSLocale *locale = [NSLocale currentLocale];

float r = 50/100;

NSString *str = [NSString stringWithFormat:@"%.2f%%", r];
str = [str stringByReplacingOccurrencesOfString:@"." withString:[locale objectForKey: NSLocaleDecimalSeparator]];

成功了!

【讨论】:

  • 为了提高您的回答质量,请说明您的帖子将如何/为何解决问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2020-11-25
  • 2018-12-16
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2017-12-19
相关资源
最近更新 更多