-7
votes

Comment jeter du double à int?

Supposons que j'ai un double et je crée un int à partir du double : xxx

in Le passé, le code ci-dessus pourrait entraîner un B = 3 si a était représenté en interne sous forme 3.999999999999999 . N'avons-nous pas à vous soucier de ce que ce soit à Swift? Quelle est la bonne façon de jeter un double à un int?


3 commentaires

Si vous ne parlez pas d'arrondi, quelle est votre question?


Dupliqué possible de Comment convertir le double en int dans Swift


"Quelle est la bonne façon de jeter un double à un int?" Cela dépend uniquement de vos propres besoins.


3 Réponses :


0
votes
let roundedVal = round(a)
var b = Int(roundedVal)

0 commentaires

0
votes

Vous devez utiliser le prototype double.rounded () avant de la jeter sur INT. Donc, un double nombre comme 3.99999999999 ... ou 4.000000000001 devient 4 : xxx


0 commentaires

1
votes

Vous utilisez Initializer générique init (_:) < / Code> qui crée un entier de la valeur de point flottante donnée, arrondi vers zéro.

Donc, il y a un problème bien connu avec des types d'épargne basés sur des mathématiques à virgule flottante (voir Ce ). À cause de cela, votre A peut être enregistré par exemple comme 3.99999999999999994 . Ensuite, si vous utilisez ce int initalizer à partir de ceci double , il crée int arrondi vers zéro ... ( 3 )


Une solution est arrondir votre double avant de passer par int initialisateur à un endroit décimal < Pré> xxx

et ensuite rond en résultat en suivant la règle suivante xxx

à cet effet, vous pouvez utiliser olded méthode avec FloatinantpointRoundingrule .ToneAreStorawayfromzero (qui est la valeur par défaut pour ce paramètre) xxx


Vous pouvez également utiliser un initalizer défables, car Si double est plus grand, alors int peut être, le code bloque xxx


4 commentaires

Ma principale question est que si j'ai un double aroctaire, cela pourrait être représenté comme 3.99999999, 4.00000000, ou 4.000000001, comme exemples. Donc, je cherche la bonne façon de faire double -> int. Je ne cherchais pas un moyen de définir une variable à 4!


@statguy Il n'y a rien de tel que bonne façon de faire double -> int . Choisissez une méthode d'arrondi.


.ToneAreStorawayfromzero est la règle d'arrondi par défaut, vous pouvez simplement écrire int (A.Rounded ())


@Martinr à droite, merci. :-)