web-dev-qa-db-ja.com

Swift double to string

XCode 6を更新する前に、ダブルを文字列バーにキャストするのに問題はありませんでしたが、エラーが発生しました

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

「doubleは文字列に変換できません」というエラーメッセージが表示されます。他の方法はありますか?

89
tim_yng

キャストではなく、フォーマットを使用して値から文字列を作成しています。

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
176
zaph
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"
65
Leo Dabus

@Zaphの答えに加えて、extension:を作成できます

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

使用法:

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

Swift 3 +:これらのコード行を試してください

let num: Double = 1.5

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

Swift内の文字列を作成するには、多分列挙値を除き、println()メソッドで行うことを行うだけです。

例えば:

var stringOfDBL = "\(myDouble)"
8
eric bob

この関数を使用すると、表示する小数点以下の桁数を指定できます。

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

使用法:

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

Swift 4:次のコードを使用

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

Swift 3:

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

私はNSNumberとNumberFormatterアプローチを必要とします(必要な場合)

extension Double {

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

}

Uには逆のアプローチも必要です

extension String {

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

}
1

Swift 3では、以下のように簡単です

let stringDouble =  String(describing: double)
1
Sebin Roy
var b = String(stringInterpolationSegment: a)

これは私のために動作します。試してみる

0
sevenkplus

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