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.00010.0010.0020.02 添加截图作为证据 为了保证 SWIFT 3 在操场上按预期工作的完整性 【参考方案1】:

在意大利语言环境中,. 是分组分隔符。这基本上应该告诉你一切。

建议是,设置语言环境,不要篡改特定的语言设置。

【讨论】:

我差点自己写答案,谢谢。 @Andrea Heh,所以我实际上并没有帮助你:) 没有,我的同事同时提出了同样的假设,你证实了这一点,所以谢谢:)

以上是关于NSNumberFormatter 将浮点字符串格式化为整数的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错

iOS 从 NSNumberFormatter 字符串中取回值

NSNumberFormatter 仅四舍五入到小数点后 3 位

NSNumberFormatter 货币符号

使用 NSNumberFormatter 将数字转换为格式

使用 NSNumberFormatter 循环中的 Objective C 自动释放