在我更新xCode 6之前,我没有任何问题将一个double转换为字符串bur现在它给了我错误
var a: Double = 1.5
var b: String = String(a)
它给我错误消息“double不能转换为字符串”。还有其他办法吗?
它不是强制转换,而是使用格式的值创建字符串。
let a:Double = 1.5
let b:String = String(format:"%f", a)
print("b: \(b)") // b: 1.500000
使用不同的格式:
let c:String = String(format:"%.1f", a)
print("c: \(c)") // c: 1.5
我更喜欢NSNumber和NumberFormatter方法(需要的地方),你也可以使用扩展来避免膨胀代码
extension Double {
var toString: String {
return NSNumber(value: self).stringValue
}
}
你还需要逆向方法
extension String {
var toDouble: Double {
return Double(self) ?? .nan
}
}
var b = String(stringInterpolationSegment: a)
这适合我。你可以尝试一下
在Swift 4中,如果你想在UI中修改和使用Double作为textLabel“String”,你可以在文件的末尾添加它:
extension Double {
func roundToInt() -> Int{
return Int(Darwin.round(self))
}
}
如果你想在文本标签中使用它,请使用它:
currentTemp.text = "\(weatherData.tempCelsius.roundToInt())"
或者将其打印为Int:
print(weatherData.tempCelsius.roundToInt())
Swift 5:使用以下代码
extension Double {
func getStringValue(withFloatingPoints points: Int = 0) -> String {
let valDouble = modf(self)
let fractionalVal = (valDouble.1)
if fractionalVal > 0 {
return String(format: "%.\(points)f", self)
}
return String(format: "%.0f", self)
}
}
let myDouble = 1.5
let myString = myDouble.description
更新Xcode 7.1•Swift 2.1:
现在,Double也可以转换为String,因此您可以根据需要使用它:
let myDouble = 1.5
let myDoubleString = String(myDouble) // "1.5"
Xcode 8.3.2•Swift 3.1:
Swift 3或更高版本我们可以扩展LosslessStringConvertible
并使其成为通用的
extension LosslessStringConvertible {
var string: String { return .init(self) }
}
1.0.string // "1.0"
对于固定数量的小数位数,您还可以扩展Double:
extension FloatingPoint {
func fixedFraction(digits: Int) -> String {
return String(format: "%.\(digits)f", self as! CVarArg)
}
}
如果您需要更多地控制数字格式(最小和最大分数和舍入模式),您可以使用NumberFormatter:
extension Formatter {
static let number = NumberFormatter()
}
extension FloatingPoint {
func fractionDigits(min: Int = 2, max: Int = 2, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.minimumFractionDigits = min
Formatter.number.maximumFractionDigits = max
Formatter.number.roundingMode = roundingMode
Formatter.number.numberStyle = .decimal
return Formatter.number.string(for: self) ?? ""
}
}
2.12345.fractionDigits() // "2.12"
2.12345.fractionDigits(min: 3, max: 3, roundingMode: .up) // "2.124"
除@Zaph答案外,您还可以创建extension:
extension Double {
func toString() -> String {
return String(format: "%.1f",self)
}
}
用法:
var a:Double = 1.5
println("output: \(a.toString())") // output: 1.5
Swift 3+:尝试这些代码
let num: Double = 1.5
let str = String(format: "%.2f", num)
在swift中创建任何字符串除了枚举值之外,只需执行println()方法中的操作
例如:
var stringOfDBL = "\(myDouble)"
Swift 4:使用以下代码
let number = 2.4
let string = String(format: "%.2f", number)
此功能将允许您指定要显示的小数位数:
func doubleToString(number:Double, numberOfDecimalPlaces:Int) -> String {
return String(format:"%."+numberOfDecimalPlaces.description+"f", number)
}
用法:
let numberString = doubleToStringDecimalPlacesWithDouble(number: x, numberOfDecimalPlaces: 2)
在快速3:
var a: Double = 1.5
var b: String = String(a)
在swift 3中,它很简单,如下所示
let stringDouble = String(describing: double)