无法将Double转换为String

时间:2014-09-29 05:59:25

标签: swift

“Swift编程语言”包含以下示例代码:

let label = "The width is "
let width = 94
let widthLabel = label + String(width)

当我将width隐式更改为Double:

let width = 94.4

为行let widthLabel = label + String(width)创建编译器错误:

  

无法使用类型(字符串,字符串)

的参数列表调用“+”



虽然我可以通过调用DoubleString var转换为width.description,但我想知道:

  1. 为什么String(Integer)有效但String(Double)没有?
  2. 在数字类型(整数,浮点数,双数等)上调用String(var)var.description之间有什么区别吗?

2 个答案:

答案 0 :(得分:4)

你无法做到这一点的原因是因为String没有初始值设定项接受double或float,而它实现了所有整数类型的初始值设定项(Int,Uint,Int32)等等。)。

所以@derdida的解决方案是正确的方法。

我不鼓励使用description属性。 意味着将double转换为字符串,但提供双重的人类可读文本表示。所以,今天的表现与转换相吻合:

let width = 94.5
println(width) // Prints "94.5"
明天它可以改为不同的东西,例如:

ninety four point five

这仍然是人类可读的,但它并不完全是双重转换为字符串。

此规则适用于实施Printable协议的所有类型(结构,类等):description属性应用于描述,而不是<强>转换

<强>附录

除了使用字符串插值外,我们还可以使用旧的类c字符串格式:

let pi = 3.1415
let piString = String(format: "%0.2f", arguments:[pi])

let message = "Pi is " + String(format: "%0.2f", arguments:[pi])
println(message)

答案 1 :(得分:1)

当你想创建一个字符串值时,我会使用它:

let width:Double = 94.4
let widthLabel = "The width is \(width)"