2017-09-06 1 views
0

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

0

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 
+0

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

+0

Mise à jour de la réponse. S'il vous plaît vérifier –

+0

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

0

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?

+0

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

+0

'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

+0

Oh ok, désolé semble que je n'ai pas assez lu la question. – Lukas