recherche

Maison  >  Questions et réponses  >  le corps du texte

关于java double类型运算的困惑

请看下面的代码

double a = 0.001;
double b = 13.456;
System.out.println(a);
System.out.println(b);
System.out.println(a+b);
System.out.println(b-a);

运算的结果是

0.001
13.456
13.456999999999999
13.455;

表示对结果不太理解,难道ab相加的结果不应该是13.457么

高洛峰高洛峰2887 Il y a quelques jours344

répondre à tous(2)je répondrai

  • 迷茫

    迷茫2017-04-17 17:43:32

    Double perdra en précision pendant le fonctionnement. Il est recommandé d'utiliser java.math.BigDecimal pour le fonctionnement.

    répondre
    0
  • 高洛峰

    高洛峰2017-04-17 17:43:32

    En effet, les nombres à virgule flottante dans les ordinateurs peuvent (notez qu'ils sont possibles) être inexacts. Ils ne peuvent être qu'infiniment proches de la valeur exacte, mais ne peuvent pas être complètement précis. Pourquoi est-ce ainsi ? Ceci est déterminé par les règles de stockage des nombres à virgule flottante. Voyons d'abord comment convertir le nombre décimal 0,4 en un nombre décimal binaire, en utilisant la méthode "multiplié par 2, arrondi et disposé dans l'ordre" (vous ne comprenez pas ? C'est une évidence, c'est trop basique), nous avons constaté que 0,4 ne peut pas être représenté avec précision par du binaire. Dans le monde des nombres binaires, c'est un nombre décimal infiniment récurrent, c'est-à-dire qu'il ne peut pas être "affiché" même si. il est "affiché". Sans oublier qu'il est stocké en mémoire (le stockage des nombres à virgule flottante comprend trois parties : le bit de signe, le bit d'exposant et la mantisse, qui ne seront pas présentées en détail, on peut comprendre qu'il n'y a aucun moyen de représenter avec précision). 1/3 dans le monde décimal, donc dans Bien sûr, 1/5 ne peut pas être exprimé avec précision dans le monde binaire (il peut être exprimé si le binaire a aussi des fractions). Dans le monde binaire, 1/5 est une décimale infiniment récurrente.

    répondre
    0
  • Annulerrépondre