NSNumberFormatter 将浮点字符串格式化为整数
NSNumberFormatter format float string as integer
我有一个带十进制数字的字符串数组,应该在 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。
我们进行了 运行 次进一步测试:
- 如果我们删除 样式,它会按预期工作
- 设备上也存在该问题
- 在 swift 3 和 风格 的 playground 中,它有效
[更新]
我忘了说我的设备语言环境是意大利语,如果我将它设置为英语它就可以了。
可能设置一个样式,然后在官方语言环境小数点分隔符不匹配时修改它的小数点分隔符不是一个好主意。
我仍然不明白为什么这只发生在特定格式上。
在意大利语言环境中,.
是分组分隔符。这基本上应该告诉你一切。
建议是,设置语言环境,不要篡改特定语言设置。
我有一个带十进制数字的字符串数组,应该在 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。
我们进行了 运行 次进一步测试:
- 如果我们删除 样式,它会按预期工作
- 设备上也存在该问题
- 在 swift 3 和 风格 的 playground 中,它有效
[更新]
我忘了说我的设备语言环境是意大利语,如果我将它设置为英语它就可以了。
可能设置一个样式,然后在官方语言环境小数点分隔符不匹配时修改它的小数点分隔符不是一个好主意。
我仍然不明白为什么这只发生在特定格式上。
在意大利语言环境中,.
是分组分隔符。这基本上应该告诉你一切。
建议是,设置语言环境,不要篡改特定语言设置。