web-dev-qa-db-fra.com

Swift - Supprimer les zéros de fuite du fichier double

Quelle est la fonction qui supprime les zéros de fin des doublons?

var double = 3.0
var double2 = 3.10

println(func(double)) // 3
println(func(double2)) // 3.1
14
Bogdan Bogdanov

Vous pouvez le faire de cette façon, mais cela retournera une chaîne:

var double = 3.0
var double2 = 3.10

func forTrailingZero(temp: Double) -> String {
    var tempVar = String(format: "%g", temp)
    return tempVar
}

forTrailingZero(double)   //3
forTrailingZero(double2)  //3.1
39
Dharmesh

Dans Swift 4, vous pouvez le faire comme ça: 

extension Double {
    func removeZerosFromEnd() -> String {
        let formatter = NumberFormatter()
        let number = NSNumber(value: self)
        formatter.minimumFractionDigits = 0
        formatter.maximumFractionDigits = 16 //maximum digits in Double after dot (maximum precision)
        return String(formatter.string(from: number) ?? "")
    }
}

exemple d'utilisation: print (Double("128834.567891000").removeZerosFromEnd()) résultat: 128834.567891

Vous pouvez également compter le nombre de chiffres décimaux de votre chaîne:

import Foundation

extension Double {
    func removeZerosFromEnd() -> String {
        let formatter = NumberFormatter()
        let number = NSNumber(value: self)
        formatter.minimumFractionDigits = 0
        formatter.maximumFractionDigits = (self.components(separatedBy: ".").last)!.count
        return String(formatter.string(from: number) ?? "")
    }
}
3
Grzegorz R. Kulesza

Supprimer les zéros de fin en sortie

Ce scénario convient lorsque la précision de sortie par défaut est souhaitée. Nous testons la valeur pour les zéros de fin potentiels et utilisons un format de sortie différent en fonction de celui-ci.

extension Double {
    var stringWithoutZeroFraction: String {
        return truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(self)
    }
}

(fonctionne aussi avec extension Float, mais pas Float80)

Sortie:

1.0 → "1"
0.1 → "0.1"
0.01 → "0.01"
0.001 → "0.001"
0.0001 → "0.0001" 

Mise en forme avec une fraction de chiffres maximale, sans zéros à la fin

Ce scénario est utile lorsqu'une précision de sortie personnalisée est souhaitée. Cette solution semble à peu près aussi rapide que celle de NumberFormatter + NSNumber de MirekE , mais un avantage pourrait être que nous évitons NSObject ici.

extension Double {
    func string(maximumFractionDigits: Int = 2) -> String {
        let s = String(format: "%.\(maximumFractionDigits)f", self)
        for i in stride(from: 0, to: -maximumFractionDigits, by: -1) {
            if s[s.index(s.endIndex, offsetBy: i - 1)] != "0" {
                return String(s[..<s.index(s.endIndex, offsetBy: i)])
            }
        }
        return String(s[..<s.index(s.endIndex, offsetBy: -maximumFractionDigits - 1)])
    }
}

(fonctionne aussi avec extension Float, mais pas Float80)

Sortie pour maximumFractionDigits: 2:

1.0 → "1"
0.12 → "0.12"
0.012 → "0.01"
0.0012 → "0"
0.00012 → "0" 

0
Cœur