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)
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)
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)
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)
这里有很多答案提出了多种技术。但是,当在 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 服务交互等,则不应使用它。