Swift double to string

时间:2014-08-16 12:00:24

标签: swift string casting double

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

var a: Double = 1.5
var b: String = String(a)

它给出了错误消息“double不能转换为字符串”。还有其他办法吗?

14 个答案:

答案 0 :(得分:172)

它不是强制转换,而是从具有格式的值创建字符串。

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

答案 1 :(得分:63)

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

对于固定数量的小数位数,您也可以扩展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"

答案 2 :(得分:18)

除@Zaph答案外,您还可以创建extension:

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

用法:

var a:Double = 1.5
println("output: \(a.toString())")  // output: 1.5

答案 3 :(得分:10)

Swift 3 +:尝试这些代码

let num: Double = 1.5

let str = String(format: "%.2f", num)

答案 4 :(得分:8)

在swift中创建一个字符串,除了enum值之外,只需执行println()方法中的操作

例如:

var stringOfDBL = "\(myDouble)"

答案 5 :(得分:3)

此功能可让您指定要显示的小数位数:

func doubleToString(number:Double, numberOfDecimalPlaces:Int) -> String {
    return String(format:"%."+numberOfDecimalPlaces.description+"f", number)
}

用法:

let numberString = doubleToStringDecimalPlacesWithDouble(number: x, numberOfDecimalPlaces: 2)

答案 6 :(得分:3)

Swift 4 : 使用以下代码

let number = 2.4
let string = String(format: "%.2f", number)

答案 7 :(得分:3)

这里有许多答案建议了多种技术。但是,在用户界面中显示数字时,您总是希望使用NumberFormatter,以便正确格式化,四舍五入和本地化结果:

let value = 10000.5

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

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

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

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

但是这种方法的优点是可以正确地进行本地化,从而在美国产生10,000.50,而在德国产生10.000,50。不同的语言环境对数字有不同的首选格式,在UI中显示数字值时,我们应该让NumberFormatter使用最终用户的首选格式。

不用说,尽管NumberFormatter在UI中准备字符串表示形式是必不可少的,但是如果将数字值作为字符串写入以进行持久存储,与Web服务接口等,则不应使用它。

答案 8 :(得分:1)

在swift 3中:

var a: Double = 1.5
var b: String = String(a)

答案 9 :(得分:1)

在swift 3中,它很简单,如下所示

{{1}}

答案 10 :(得分:1)

我更喜欢NSNumber和NumberFormatter方法(在需要的地方),也可以使用扩展名来避免膨胀代码

extension Double {

   var toString: String {
      return NSNumber(value: self).stringValue
   }

}

U也可能需要反向处理

extension String {

    var toDouble: Double {
        return Double(self) ?? .nan
    }

}

答案 11 :(得分:0)

[mark@theNosebook Sample_P4]$ cat $(ls *_R1_*) > cat
[mark@theNosebook Sample_P4]$ ls -lh
total 1.2G
-rw-r--r-- 1 mark mark 407M Aug 13 12:36 cat
-rwxr-xr-x 1 mark mark 404M Aug 13 12:25 P4_CTCTCTAC-AGAGTAGA_L002_R1_001.fastq.gz
-rwxr-xr-x 1 mark mark 2.6M Aug 13 12:25 P4_CTCTCTAC-AGAGTAGA_L002_R1_002.fastq.gz
-rwxr-xr-x 1 mark mark 414M Aug 13 12:25 P4_CTCTCTAC-AGAGTAGA_L002_R2_001.fastq.gz
-rwxr-xr-x 1 mark mark 2.6M Aug 13 12:25 P4_CTCTCTAC-AGAGTAGA_L002_R2_002.fastq.gz
-rwxr-xr-x 1 mark mark  144 Aug 13 12:25 SampleSheet.csv

这对我有用。你可以尝试一下

答案 12 :(得分:0)

在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())

答案 13 :(得分:0)

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: "%.*f", points, self)
        }
        return String(format: "%.0f", self)
    }
}