[swift] Swift double to string

xCode 6을 업데이트하기 전에 double을 문자열로 캐스팅하는 데 문제가 없었지만 이제 오류가 발생합니다.

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

“double is not convertible to string”이라는 오류 메시지가 표시됩니다. 다른 방법이 있습니까?



답변

캐스팅이 아니라 형식이있는 값에서 문자열을 생성합니다.

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

format서식이 필요하지 않은 경우 속성을 생략 할 수도 있습니다 .


답변

let double = 1.5
let string = double.description

Xcode 7.1 업데이트 • Swift 2.1 :

이제 Double도 String으로 변환 할 수 있으므로 원하는대로 간단히 사용할 수 있습니다.

let double = 1.5
let doubleString = String(double)   // "1.5"

Swift 3 이상 에서는 확장 LosslessStringConvertible하여 일반화 할 수 있습니다.

Xcode 11.3 • Swift 5.1 이상

extension LosslessStringConvertible {
    var string: String { .init(self) }
}

let double = 1.5
let string = double.string  //  "1.5"

고정 된 분수 자릿수에 대해 확장 할 수 있습니다. FloatingPoint 프로토콜 있습니다.

extension FloatingPoint {
    func fixedFraction(digits: Int) -> String {
        return String(format: "%.*f", digits, 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)


답변

enum 값을 제외하고 신속하게 문자열을 만들려면 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)