2012-06-26 7 views
2

J'ai deux valeurs, une provenant de l'utilisateur et une autre de DB. Userinput ont la valeur "1" comme chaîne, tandis que valuefromDB ont la valeur 0.001 comme valeur flottante.Float/Float = résultat étrange

donc 1/0,001 = 1000

mais mon code C# me donner 999,999939 comme résultat;

var final = float.Parse(userinput)/valuefromDB 

quand j'ai « 2 » en tant que valeur d'entrée de l'utilisateur, le résultat est correct, 2000 ...

+3

Ceci est une conséquence de la précision du flotteur. – Candide

+6

Tout le monde programmeur doit comprendre les nombres à virgule flottante: http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers – mellamokb

+0

Avez-vous besoin de précision de base 10, ou avez-vous besoin de base 2? –

Répondre

9

C'est parce que tous les nombres décimaux peuvent être représentés avec précision en binaire (qui est the representation that float uses). La solution consiste à formater le résultat au nombre désiré de décimales, ce qui le fait arrondir et afficher "correctement" en conséquence.

Mise à jour: Pour formater une float pour l'affichage, jetez un oeil à this MSDN reference page et this page of examples.

+0

Pouvez-vous me donner un simple exemple C#? :) –

+0

@NovkovskiStevoBato: Mise à jour de la réponse. – Jon