2010-06-18 6 views
3

Le soufflet de fonction est passée une chaîne "1004233" et imprime le résultat suivant:
D1 = 1,004233
D2 = ,00423299999999993
D3 = 4232,99999999993
D4 = 4232
C# perte de précision lors de la division d'une double

J'ai besoin de D4 pour imprimer 4233 et non 4232. Comment empêcher cette perte de précision de se produire?

public string someFunc(String s){ 
     string retval = "0"; 
     try{ 
      int id = int.Parse(s); 
      double d = (double)id/(double)1000000; 
      Console.WriteLine("D1 = " + d); 
      d = d - Math.Truncate(d); 
      Console.WriteLine("D2 = " + d); 
      d = d * (double)1000000; 
      Console.WriteLine("D3 = " + d); 
      retval = "" + Math.Truncate(d); 
      Console.WriteLine("D4 = " + retval); 
     }catch(Exception ex){} 
     return retval; 
} 

Répondre

12

Ceci est le standard floating-point question. Utilisez à la place un decimal.
Bien que decimal s n'ont pas non plus une précision infinie, ils sont implémentés en base 10, de sorte qu'ils vous donneront les résultats que vous attendez.

Questions connexes