Ios 无法使用区域和语言的某些组合将字符串转换为双精度

Ios 无法使用区域和语言的某些组合将字符串转换为双精度,ios,swift,Ios,Swift,在某些本地化中,我无法将字符串转换为Double。假设我的语言设置为英语美国,地区设置为瑞士。 所讨论的字符串是“8,5” 如果我使用Double(“8,5”)它返回nil 如果我使用 let formatter = NumberFormatter() formatter.locale = Locale.current //it.ch formatter.numberStyle = .decimal let number2 = formatter.number(f

在某些本地化中,我无法将字符串转换为Double。假设我的语言设置为英语美国,地区设置为瑞士。 所讨论的字符串是“8,5”

如果我使用
Double(“8,5”)
它返回
nil

如果我使用

    let formatter = NumberFormatter()
    formatter.locale = Locale.current //it.ch
    formatter.numberStyle = .decimal
    let number2 = formatter.number(from: "8,5")
它也返回
nil

如果我将语言设置为英语(美国),将地区设置为美国,或者说意大利语和意大利语,它就会起作用


编辑:要澄清数字“8,5”是使用默认文本字段中的默认键盘数字键盘输入的

您预计会发生什么?“8,5”不是“IT-CH”中任何double的有效表示形式-您是否正在执行转换以返回某种类型的默认值,而不是
nil
?@AlexeiLevenkov,如果我使用的是文本字段,它使用的是“,”而不是“.”以及IT-CH和英语(美国)。基本上,用户必须输入一个数字,但有些用户使用的语言与他们所在地区不同,Swift不能将其识别为Double,但为了一致性,您也必须在此处切换十进制分隔符?(在数字键盘上/输入)Gianni如果你不能尊重用户的选择住在那里。。。也许会让他们重新适应IT-IT环境?:)对于给定的区域/语言组合(如It-CH中的“8,5”),当值不表示double时,仍然不清楚您预期会发生什么@d4Rk建议对我来说听起来很合理-使用尊重用户选择的控件(你可能想澄清为什么这不是一个选项),解决此类问题的一种可能性是始终将所有
转换为
(因为通常,这些是唯一使用的十进制分隔符),然后只使用POSIX语言环境进行解析。但是,您必须小心,因为在某些语言中,
用作分组分隔符。