关于java double类型运算的困惑
高洛峰
高洛峰 2017-04-17 17:41:32
0
2
338

请看下面的代码

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么

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
迷茫

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

小葫芦

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal