NSNumberFormatter numberFromString货币风格格式化返回0
我试图以从货币样式设置格式的UITextField(例如:$ 30,034.12 => 30034.12):获得双值来测试下面的代码NSNumberFormatter numberFromString货币风格格式化返回0
// Init and configure formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMaximumFractionDigits:2];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"us_US"];
[formatter setLocale:locale];
[formatter setGroupingSize:3];
[formatter setUsesGroupingSeparator:YES];
[formatter setGroupingSeparator:@","];
[formatter setAllowsFloats:YES];
// Get a formatted string using the local currency formatter and then get a double
// vice-versa
NSNumber *amount = [NSNumber numberWithDouble:30034.12];
NSString *amountString = [formatter stringFromNumber:amount];
// Output here OK : @"$ 30,034.12"
double amountDouble = [[formatter numberFromString:amountString] doubleValue];
// Output here NOT OK : 0
难道任何人都有/解决了同样的问题?
谢谢!
更新:
@DanielBarden和其他人。实际上,为了简化这篇文章,我没有包含指定我从哪里获取字符串的部分:文本字段。实际上,代码的结束之前的线应为:
// Init fromatter with style $ XXX,XXX.yy
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMaximumFractionDigits:2];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"us_US"];
[formatter setLocale:locale];
[formatter setGroupingSize:3];
[formatter setGroupingSeparator:@","];
[formatter setUsesGroupingSeparator:YES];
// Get the float value of the text field and format it
textField.text = [formatter
stringFromNumber:[NSNumber
numberWithDouble:[textField.text
floatValue]]];
:
NSString *amountString = [textField text];
而这个文本字段以前与来自另一方法如下代码格式化(使用相同的格式配置货币样式)
现在的问题是,当我做一个NSLog时,我得到完全相同的字符串,但是当我通过字符与一个循环比较它们时,它表示$后面的空格是文本字段上的“真实空间”,并且不同符号在最初的字符串(amountString,我试图在最初的帖子中测试...)。编码问题?
该代码对我来说看起来是正确的,Xcode与我同意。我在两行中添加了你缺少的内容:
NSLog(@"%@",amountString);
NSLog(@"%f",amountDouble);
并且输出是正确的。我建议你检查你如何记录数值。
是的,实际上这个代码工作正常,它没有出现在我包括原始代码,我从文本字段中获取数量字符串。这个double以前使用相同的格式化程序格式化并影响到文本字段。从那里我试图以另一种方式来完成这项任务。 我在“Update:”下的原始文章末尾添加了有关该问题的更详细说明。我怀疑一个编码问题,但仍然在努力。你有什么线索?非常感谢 ! –
我能想到的唯一的问题是$符号的问题。将格式化程序设置为货币形式需要$符号,如果它不存在于字符串中,它将返回0
嗯......当我试图更深入地调试它时,我意识到我实际上遇到了将$符号与数值分开的空间问题。我怀疑编码问题,但仍然没有解决它。我在原帖的末尾添加了更详细的解释,以备有时间阅读。非常感谢 ! –
您可以显示您正在创建的'NSLog'调用吗? – PengOne
这段代码对我来说工作得很好。你是如何调试它的?我正在使用NSLog(“%f”,amountDouble); –
我相信问题在于$符号。由于你的字符串有符号,当试图获得该符号的双倍值时,它会给出一个大的0. –