Ios 数字格式无法正常工作

Ios 数字格式无法正常工作,ios,swift,Ios,Swift,我正在解码一个十进制的字符串版本,我想格式化它并将其返回为双精度: let str = "0.945404" let numberFormatter = NumberFormatter() numberFormatter.maximumFractionDigits = 2 numberFormatter.roundingMode = .halfUp numberFormatter.numberStyle = .decimal print(numberFormatter.number(from:

我正在解码一个十进制的字符串版本,我想格式化它并将其返回为
双精度

let str = "0.945404"
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 2
numberFormatter.roundingMode = .halfUp
numberFormatter.numberStyle = .decimal

print(numberFormatter.number(from: str))
numberFormatter.number(from:str)
似乎返回
nil
,我不知道为什么


我很乐意在这里帮忙。谢谢

如果您得到的是固定格式的十进制字符串,那么您需要使用匹配的区域设置数字格式化程序。如果不这样做,格式化程序将假定用户的区域设置,并且许多区域设置不使用
作为十进制分隔符

将字符串转换为数字时,也不需要设置小数位数。稍后,当向用户显示数字时,您可以使用另一个数字格式化程序(这次使用用户的区域设置)和所需数量的小数位数来获得可显示的字符串

let str = "0.945404"
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "en_US")
numberFormatter.numberStyle = .decimal

print(numberFormatter.number(from: str))

仅供参考:这个问题只发生在我在设备上测试时,我猜格式化程序是在模拟机上选择美国地区(尽管我已经激活了本地化,而且它应该是德国的)

这对我来说很好。它返回一个可选的。我用一个
if let
打开了它,从中得到了一个NSNumber。你把一个项目干净利落地做完了吗?或者您正在运行哪个版本的Xcode?运行问题代码的设备/模拟器的区域设置是什么?如果您的区域设置没有使用
作为十进制分隔符,您将得到
nil
。为什么要设置
最大分数位数
?这仅在将数字转换为字符串时有用,而在解析字符串时则不可用。因此,它在模拟器或我的设备上工作时,我看到我的许多用户得到零。它们必须具有使用,作为小数分隔符的区域设置。我正在设置maximumFractionDigits,因为我希望它四舍五入到小数点后2位places@ZackShapiro绳子是从哪里来的?为什么在使用
的区域设置中使用
?而舍入只需要在将数字转换为字符串时进行,而不需要在解析字符串时进行。字符串来自API,其格式始终为12.50或0.65。从未使用过,