Swift double to string

tim*_*yng 99 string double casting swift

在我更新xCode 6之前,我没有任何问题将一个double转换为字符串bur现在它给了我错误

var a: Double = 1.5
var b: String = String(a)
Run Code Online (Sandbox Code Playgroud)

它给我错误消息"double不能转换为字符串".还有其他办法吗?

zap*_*aph 186

它不是强制转换,而是使用格式的值创建字符串.

let a:Double = 1.5
let b:String = String(format:"%f", a)
print("b: \(b)") // b: 1.500000
Run Code Online (Sandbox Code Playgroud)

使用不同的格式:

let c:String = String(format:"%.1f", a)
print("c: \(c)") // c: 1.5
Run Code Online (Sandbox Code Playgroud)

  • 您只需更改格式即可控制位数:`format:"%.1f"= 1位// 1.5`; `格式:"%.5f"= 5位// 1.50000` (2认同)
  • 请更新您的答案,在Swift 2.1中,您只需要执行String(yourDouble)。 (2认同)

Leo*_*bus 69

let myDouble = 1.5 
let myString = myDouble.description
Run Code Online (Sandbox Code Playgroud)

更新Xcode 7.1•Swift 2.1:

现在,Double也可以转换为String,因此您可以根据需要使用它:

let myDouble = 1.5
let myDoubleString = String(myDouble)   // "1.5"
Run Code Online (Sandbox Code Playgroud)

Xcode 8.3.2•Swift 3.1:

对于固定数量的小数位数,您还可以扩展Double:

extension LosslessStringConvertible { 
    var string: String { return .init(self) } 
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更多地控制数字格式(最小和最大分数和舍入模式),您可以使用NumberFormatter:

1.0.string  //  "1.0"
Run Code Online (Sandbox Code Playgroud)

  • 不,您对不同的ios版本不会有任何问题.它也适用于OSX.顺便说一句,这是使用Double或Int进行字符串插值时得到的结果. (2认同)
  • 很好,很聪明. (2认同)

Max*_*tin 20

除了@Zaph的答案,你可以创建 extension:

extension Double {
    func toString() -> String {
        return String(format: "%.1f",self)
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

var a:Double = 1.5
println("output: \(a.toString())")  // output: 1.5
Run Code Online (Sandbox Code Playgroud)

  • @Zaph为什么不呢。当然,您可以添加一些前缀并将其更改为“myToString()”以确保其自定义定义。但与其他语言一样,原型设计可以避免代码重复并实现良好的维护。 (2认同)

Shi*_*mar 11

Swift 3+:尝试这些代码

let num: Double = 1.5

let str = String(format: "%.2f", num)
Run Code Online (Sandbox Code Playgroud)


小智 8

在swift中创建任何字符串除了枚举值之外,只需执行println()方法中的操作

例如:

var stringOfDBL = "\(myDouble)"
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 5

这里有很多答案提出了多种技术。但是,当在 UI 中显示数字时,您总是希望使用 aNumberFormatter以便结果正确格式化、舍入和本地化:

let value = 10000.5

let formatter = NumberFormatter()
formatter.numberStyle = .decimal

guard let string = formatter.string(for: value) else { return }
print(string) // 10,000.5
Run Code Online (Sandbox Code Playgroud)

如果您想要固定的小数位数,例如货币值

let value = 10000.5

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2

guard let string = formatter.string(for: value) else { return }
print(string) // 10,000.50
Run Code Online (Sandbox Code Playgroud)

但这种方法的优点在于,它将被适当本地化,从而导致10,000.50在美国,但10.000,50在德国。不同的区域设置有不同的首选数字格式,在 UI 中显示数值时,我们应该NumberFormatter使用最终用户首选的格式。

不用说,虽然NumberFormatter在 UI 中准备字符串表示时很重要,但如果将数值写入字符串以进行持久存储、与 Web 服务交互等,则不应使用它。