-1

attendu que je tentais à soustraire des nombres en java, et cela me donne le résultat inattenduComment utilisez-vous double pour obtenir le résultat

public class FloatWeird 
{ 
    public static void main(String[] args) 
    { 
     double n = 1; 

     for(int i = 0;i<10;i++) 
     { 
      System.out.println(n); 
      n = n - 0.10; 
     } 

    } 
} 

Résultat

1.0 
0.9 
0.8 
0.7000000000000001 
0.6000000000000001 
0.5000000000000001 
0.40000000000000013 
0.30000000000000016 
0.20000000000000015 
0.10000000000000014 

Je suis passé par quelques forums et comprenez que l'utilisation de la classe BigDecimal est une solution. Cependant, existe-t-il un moyen de le corriger d'une manière plus simple en utilisant le double comme ci-dessus?

+0

Que représentent ces chiffres? Disons qu'ils représentent la quantité de gin dont vous avez besoin pour faire un cocktail. Est-ce vraiment important si vous ajoutez un millionième de milliardième de litre de plus que nécessaire? –

+0

À mon humble avis Ce n'est pas un doublon car le PO déclare spécifiquement qu'ils sont conscients de l'alternative d'utiliser BigDecimal. –

Répondre

0

Je vous suggère d'utiliser un arrondi approprié. Lorsque vous imprimez un double, vous devez considérer quel est le tour approprié.

Vous pouvez également arrondir le résultat en calculant ce que fait BigDecimal.

n = n - 0.10; 
n = Math.round(n * 10)/10.0; 

Cela réduira l'erreur cumulative.

Une autre approche consiste à travailler dans une unité différente, par ex. au lieu du dollar, vous utilisez des cents. Cela signifie que vous pouvez utiliser un int ou long et convertir uniquement en dollars pour la présentation.

long n = 100; 
for(int i = 0; i < 10; i++) { 
    System.out.println(n/100.0); 
    n = n - 10; 
} 

imprime cette http://ideone.com/Uf70jC

1.0 
0.9 
0.8 
0.7 
0.6 
0.5 
0.4 
0.3 
0.2 
0.1 

Remarque: même si vous utilisez BigDecimal, cela reste à faire cela, sinon l'API peut vous aider à déterminer à quel moment vous devriez le faire.

+1

https://www.youtube.com/watch?v=PZRI1IfStY0 http://floating-point-gui.de/basic/ –