Mit Swift 5 können Sie je nach Bedarf einen der 9 folgenden Stile wählen, um ein gerundetes Ergebnis von einem Double
zu erhalten.
1. Verwenden der FloatingPoint
rounded()
Methode
Im einfachsten Fall können Sie die Double
rounded()
Methode verwenden.
let gerundeterWert1 = (0,6844 * 1000).rounded() / 1000
let gerundeterWert2 = (0,6849 * 1000).rounded() / 1000
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
2. Verwenden der FloatingPoint
rounded(_:)
Methode
let gerundeterWert1 = (0,6844 * 1000).rounded(.toNearestOrEven) / 1000
let gerundeterWert2 = (0,6849 * 1000).rounded(.toNearestOrEven) / 1000
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
3. Verwenden der Darwin round
Funktion
Foundation bietet eine round
Funktion über Darwin an.
import Foundation
let gerundeterWert1 = round(0,6844 * 1000) / 1000
let gerundeterWert2 = round(0,6849 * 1000) / 1000
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
4. Verwenden einer benutzerdefinierten Methode für die Double
Erweiterung, die mit den Darwin round
und pow
Funktionen erstellt wurde
Wenn Sie die vorherige Operation mehrmals wiederholen möchten, kann es eine gute Idee sein, Ihren Code umzustrukturieren.
import Foundation
extension Double {
func roundToDecimal(_ nachkommastellen: Int) -> Double {
let multiplikator = pow(10, Double(nachkommastellen))
return Darwin.round(self * multiplikator) / multiplikator
}
}
let gerundeterWert1 = 0,6844.roundToDecimal(3)
let gerundeterWert2 = 0,6849.roundToDecimal(3)
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
Wenn nötig, bietet NSDecimalNumber
eine ausführliche, aber leistungsstarke Lösung für das Runden von Dezimalzahlen.
import Foundation
let scale: Int16 = 3
let verhalten = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)
let gerundeterWert1 = NSDecimalNumber(value: 0,6844).rounding(accordingToBehavior: verhalten)
let gerundeterWert2 = NSDecimalNumber(value: 0,6849).rounding(accordingToBehavior: verhalten)
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
import Foundation
let skala = 3
var wert1 = Decimal(0,6844)
var wert2 = Decimal(0,6849)
var gerundeterWert1 = Decimal()
var gerundeterWert2 = Decimal()
NSDecimalRound(&gerundeterWert1, &wert1, skala, NSDecimalNumber.RoundingMode.plain)
NSDecimalRound(&gerundeterWert2, &wert2, skala, NSDecimalNumber.RoundingMode.plain)
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
Wenn Sie aus Ihrer Rundungoperation eine NSString
zurückgeben möchten, ist die Verwendung des NSString
Initialisierers eine einfache, aber effiziente Lösung.
import Foundation
let gerundeterWert1 = NSString(format: "%.3f", 0,6844)
let gerundeterWert2 = NSString(format: "%.3f", 0,6849)
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
8. Verwenden der String
init(format:_:)
Initialisierung
Der Swift String
Typ ist mit der Foundation NSString
Klasse verbunden. Daher können Sie den folgenden Code verwenden, um aus Ihrer Rundungoperation einen String
zurückzugeben:
import Foundation
let gerundeterWert1 = String(format: "%.3f", 0,6844)
let gerundeterWert2 = String(format: "%.3f", 0,6849)
print(gerundeterWert1) // gibt 0,684 zurück
print(gerundeterWert2) // gibt 0,685 zurück
Wenn Sie erwarten, dass Ihre Rundungoperation ein String?
zurückgibt, bietet NumberFormatter
eine hoch anpassbare Lösung.
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
formatter.roundingMode = NumberFormatter.RoundingMode.halfUp
formatter.maximumFractionDigits = 3
let gerundeterWert1 = formatter.string(from: 0,6844)
let gerundeterWert2 = formatter.string(from: 0,6849)
print(String(describing: gerundeterWert1)) // gibt Optional("0,684") aus
print(String(describing: gerundeterWert2)) // gibt Optional("0,685") aus