Swift 3铸造或数字格式

Swift 3铸造或数字格式,swift,casting,numberformatter,Swift,Casting,Numberformatter,使用数字格式比简单的铸造有什么优势吗? 例如,下面的示例1和示例2似乎都做相同的工作,但是casting似乎更容易阅读,那么为什么我发现的代码示例中经常使用NumberFormatter呢 var displayValue: Double? { get { if let text = display.text, // 1 let value = NumberFormatter().number(from: text)?.doubleValue

使用数字格式比简单的铸造有什么优势吗? 例如,下面的示例1和示例2似乎都做相同的工作,但是casting似乎更容易阅读,那么为什么我发现的代码示例中经常使用NumberFormatter呢

var displayValue: Double? {
    get {
        if let text = display.text,
        // 1 let value = NumberFormatter().number(from: text)?.doubleValue
        // 2 let value = Double(text)
}

差别很大。如果你想处理一些事情:

  • 千位分隔符和小数位:在美国,一百万通常写为
    1000000
    ,在法国,一百万通常写为
    1.000.000
    ,在印度,一百万通常写为
    10,00000
  • 货币符号:
    100美元
    100英镑
    100欧元
  • 会计样式中的负数,例如-100写为
    (100)
    (通常也是红色)
  • 百分比:5%→ 0.05
  • 单词拼写:“106”→ 106

等等。。。然后使用
NumberFormatter

差别很大
NumberFormatter
处理完全本地化的数字,包括正确的十进制分隔符和分组分隔符。如果要在UI中显示/捕获此数字,
NumberFormatter
将其正确本地化,而
Double(text)
可能无法正确处理。例如,如果德国用户输入
3,14
NumberFormatter
将正确解释为
3.14
,而
Double(text)
不会。底线是,如果在UI的字符串之间进行转换,
NumberFormatter
是谨慎的。如果不是(例如,用于解析JSON中表示为字符串的数字),则
Double(text)
就足够了。