NSNumberFormatter 将浮点字符串格式化为整数
Posted
技术标签:
【中文标题】NSNumberFormatter 将浮点字符串格式化为整数【英文标题】:NSNumberFormatter format float string as integer 【发布时间】:2017-01-20 15:54:42 【问题描述】:我有一个带有十进制数字的字符串数组,应该在 NSNumber 中转换:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setDecimalSeparator:@"."];
NSArray * ar = @[@"0.0001",@"0.0010",@"0.002", @"0.02"];
for (NSString * numS in ar)
NSNumber * num = [formatter numberFromString:numS];
NSLog(@"%@", num);
日志打印:0.0001, 0.001, 2, 0.02 我不明白为什么会这样,我也尝试更改小数位数属性但没有成功。 当我写一个前两位为零的 3 个小数位数时,我总是得到一个整数作为结果。 我正在使用模拟器 Xcode 8。 我们进行了进一步的测试:
如果我们删除 style,它会按预期工作 设备上也存在此问题 在带有 swift 3 和 style 的 Playground 中,它可以工作[更新]
我忘了提到我的设备语言环境是意大利语,如果我用英语设置它就可以了。 当官方语言环境小数分隔符不匹配时,可能设置一个样式然后修改它的小数分隔符不是一个好主意。 我仍然不明白为什么这只发生在特定格式上。
【问题讨论】:
我已经运行了你的代码,我得到了什么:'2017-01-20 18:01:32.121 ZoomingSample[5294:181511] 0.0001 2017-01-20 18:01:32.122 ZoomingSample [5294:181511] 0.001 2017-01-20 18:01:32.122 ZoomingSample[5294:181511] 0.002 2017-01-20 18:01:32.122 ZoomingSample[5294:181511] 0.02' 你可能误读了输出,我的朋友,你的 sn-p 显示了这个:0.0001
、0.001
、0.002
和 0.02
。
添加截图作为证据
为了保证 SWIFT 3 在操场上按预期工作的完整性
【参考方案1】:
在意大利语言环境中,.
是分组分隔符。这基本上应该告诉你一切。
建议是,设置语言环境,不要篡改特定的语言设置。
【讨论】:
我差点自己写答案,谢谢。 @Andrea Heh,所以我实际上并没有帮助你:) 没有,我的同事同时提出了同样的假设,你证实了这一点,所以谢谢:)以上是关于NSNumberFormatter 将浮点字符串格式化为整数的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错
iOS 从 NSNumberFormatter 字符串中取回值