En utilisant Swift3
et toujours obtenir le coup de choses. J'utilise le type Decimal
parce que cela implique de la monnaie et j'ai du mal à obtenir l'arrondi. J'ai lu la documentation NSDecimalNumberHandler
et la fonction , mais je ne comprends pas très bien comment cela fonctionne. Essentiellement je veux juste que tous mes types Decimal
dans cette classe arrondissent à la centième place quand les fonctions de calcul que j'ai construites fonctionnent. Est-ce que quelqu'un peut me donner un exemple rapide de la façon de faire cela? Merci!Comment arrondir le type décimal?
Répondre
S'il vous plaît vérifier:
Il utilise NSDecimalNumber & NSDecimalNumberHandler:
let decimalStr = NSDecimalNumber(string: "500.2595")
let decimalStrHandler = NSDecimalNumberHandler(roundingMode: .plain, scale: 3, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let roundedVal = decimalStr.rounding(accordingToBehavior: decimalStrHandler)
print(roundedVal) // prints 500.26
Ce utilise NumberFormatter & décimal:
extension Decimal {
func roundDecimal() -> String {
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 2
return formatter.string(from: self as NSDecimalNumber)!
}
}
Vous devez appeler comme ci-dessous:
let decimalStr = Decimal(string: "500.2595")!
print(decimalStr.roundDecimal()) // prints 500.26
let decimalFloat = Decimal(floatLiteral: 500.2595)
print(decimalFloat.roundDecimal()) // prints 500.26
Vous ne devez jamais enregistrer une valeur monétaire en tant que nombre décimal. Toujours utiliser entier, comme ceci:
1.00$ = 100
4567.89$ = 456789
Et puis quand vous voulez présenter en cents pas, vous pouvez diviser par 100.
Voir ceci: Why not use Double or Float to represent currency?
Je ne suis pas à l'aide d'un double/flotteur, j'utilise le struct décimal (https://developer.apple.com/documentation/foundation/decimal). Je sais que Float/Doubles ne peut pas stocker exactement des décimales, mais je crois comprendre que Decimal fonctionnera pour ce dont j'ai besoin. – Grimes47
'Decimal' est un type spécialement créé pour stocker des devises car il utilise une arithmétique décadique et de haute précision. – Sulthan
Oh ok, désolé semble que je n'ai pas assez lu la question. – Lukas
Cela ressemble à une chaîne de caractères. Je souhaite renvoyer la valeur de la variable sous la forme d'un nombre décimal arrondi à la centième place (en utilisant le style d'arrondi .plain dans NSDecimalNumber.RoundingMode.) – Grimes47
Mise à jour de la réponse. S'il vous plaît vérifier –
Vini App, merci beaucoup. J'ai utilisé la méthode d'extension et cela a fonctionné. J'apprécie beaucoup. Je sais que Decimal est une structure plutôt qu'une classe et d'après ce que j'ai lu, il a été introduit dans Swift 3. J'aime Decimal, mais j'aimerais ne pas avoir à lancer chaque fois que je veux utiliser les méthodes NSDecimalNumber. – Grimes47