552 Stimmen

Runden eines Double-Werts auf x Dezimalstellen in Swift

Kann mir jemand sagen, wie man einen Double-Wert auf x Dezimalstellen in Swift rundet?

Ich habe:

var totalWorkTimeInHours = (totalWorkTime/60/60)

Wobei totalWorkTime eine NSTimeInterval (Double) in Sekunden ist.

totalWorkTimeInHours gibt mir die Stunden, aber es gibt mir die Zeit in einer so langen präzisen Zahl, z.B. 1.543240952039......

Wie kann ich das auf z.B. 1.543 abrunden, wenn ich totalWorkTimeInHours drucke?

7voto

Lukasz D Punkte 299

Swift 5

mit der Verwendung der String-Methode

var yourDouble = 3.12345
// Um dies auf 2 Dezimalstellen zu runden, könnte ich es in einen String umwandeln
let roundingString = String(format: "%.2f", myDouble)
let roundedDouble = Double(roundingString) // und dann zurück zu double
// Ergebnis ist 3.12 

aber es ist akzeptierter, eine Erweiterung zu verwenden

extension Double {
    func round(to decimalPlaces: Int) -> Double {
        let precisionNumber = pow(10,Double(decimalPlaces))
        var n = self // self ist der aktuelle Wert des Doubles, den Sie runden werden
        n = n * precisionNumber
        n.round()
        n = n / precisionNumber
        return n
    }
}

und dann können Sie verwenden:

yourDouble.round(to:2)

6voto

Matiu Awaiti Punkte 61

Dies scheint in Swift 5 zu funktionieren.

Ziemlich überrascht, dass es dafür noch keine Standardfunktion gibt.

// Kürzung einer Double-Zahl auf n Dezimalstellen mit Rundung

extension Double {

    func truncate(to places: Int) -> Double {
    return Double(Int((pow(10, Double(places)) * self).rounded())) / pow(10, Double(places))
    }

}

6voto

Pratik Sodha Punkte 3514

Die Lösung hat für mich funktioniert. XCode 13.3.1 & Swift 5

extension Double {

    func rounded(decimalPoint: Int) -> Double {
        let power = pow(10, Double(decimalPoint))
       return (self * power).rounded() / power
    }
}

Test:

print(-87.7183123123.rounded(decimalPoint: 3))
print(-87.7188123123.rounded(decimalPoint: 3))
print(-87.7128123123.rounded(decimalPoint: 3))

Ergebnis:

-87.718
-87.719
-87.713

6voto

yogi Punkte 144

Nicht Swift, aber ich bin sicher, Sie verstehen die Idee.

pow10np = pow(10,num_places);
val = round(val*pow10np) / pow10np;

5voto

vadian Punkte 251138

In iOS 15 / macOS 12 wurden neue Inline-Zahlenformate eingeführt.

Ohne eine Rundungsregel rundet es wie in der Schule gelehrt. Die Syntax

let value = 1.543240
let rounded = value.formatted(.number.precision(.fractionLength(2))))

rundet auf 1.54 ab und

let value = 1.545240
let rounded = value.formatted(.number.precision(.fractionLength(2))))

auf 1.55 auf, fractionLength gibt die Anzahl der Nachkommastellen an

Um das Abrunden zu erzwingen, fügen Sie eine Rundungsregel hinzu

let rounded = value.formatted(.number.rounded(rule: .down).precision(.fractionLength(2))))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X