Swift 3铸造或数字格式
使用数字格式比简单的铸造有什么优势吗? 例如,下面的示例1和示例2似乎都做相同的工作,但是casting似乎更容易阅读,那么为什么我发现的代码示例中经常使用NumberFormatter呢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
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)
就足够了。