J'essaie de convertir détail.amout = 51.74 O / P: Merci d'avance. p> p> nstring code> à
long code> mais je reçois la valeur des ordures. Vous trouverez ci-dessous mon code:
détail.fee = 2.72 strong> p>
T1: 9223372036854775807 (Valeur des ordures ici)
T2: 27200000000000000 (fonctionne bien) p>
blockQuote>
4 Réponses :
C'est parce que vous stockez le produit Utilisez soit basé sur les types de données de C: p>
Type d'entier signé long. Capable de contenir au moins la
[-2 147 483 647, +2 147 483 647]; Ainsi, c'est au moins 32
Bits en taille. P>
blockQuote>
long code> type variables
t1 code> et
t2 code>. p>
float code> ou
double code>, et vous obtiendrez la bonne réponse. P>
9223372036854775807 est la valeur maximale d'un long code> long code>. Je déduis que
[[jsondict ValueForKeyPathe: @ "détail.amount"] doublevalue] * 1000000000000000000 code> est plus grand que la valeur maximale
LONG code>, donc lorsque vous le jettez sur
Long code>, vous obtenez la valeur la plus proche que
long code> peut représenter. p>
Chaque numéro de numéro (INT, long, double, flotteur) a des limites. Pour votre long 64 bits (parce que votre appareil est 64 bits), la limite supérieure est la suivante: 9.223,372 036 854 775 807 (voir ici: HTTPS : //fr.wikipedia.org/wiki/9,223,372,036 854 775 807 )
Dans votre cas, 51,74 * 1 000 000 000 000 000 000 = P>
9,223,372,036,854,775,807
Comme vous le lisez, il n'est pas possible avec long code>. Depuis que vous avez l'air de financer des mathématiques, vous devez utiliser
nsdecimalnumate code> au lieu de
double code> pour résoudre ce problème. P>
Il est hors de portée de long
Alors, doublera mon problème?