Warum gibt C # Convert.ToDouble (5/100) 0.0 und nicht 0.05 zurück?

7
%Vor%

Gibt 0,0 zurück, aber ich erwartete 0,05

Was kann / muss ich ändern, um 0,05

zu erhalten?

, weil die 5 in diesem Beispiel eine Variable ist

    
Marco 05.08.2010, 11:40
quelle

7 Antworten

18

5/100 erfolgt in Integer-Arithmetik, die 0 vor Umwandlung ergibt. Probieren Sie

aus %Vor%

Wenn 5 in einer Variablen x (vom Integer-Typ) ist, dann verwenden Sie:

%Vor%

oder

%Vor%

um die Absicht klar zu machen (danke John!)

oder

%Vor%     
Nordic Mainframe 05.08.2010, 11:42
quelle
4
  

Anders als in der realen Welt behandeln Computer   mathematische Operationen ein bisschen   anders, obwohl es keine gibt   signifikanter Unterschied, sobald wir   verstehe, warum es sich so verhält.

1.) Warum verhält es sich so?

Beachten Sie, dass Ganzzahlen ganze Zahlen sind und die Variablen vom Typ ganze Zahlen nur ganze Zahlen speichern können und keine Dezimalzahlen speichern oder erkennen können. Wenn Sie 5/100 sagen, sind sowohl 5 als auch 100 Ganzzahlenliterale für die Computer und werden Ganzzahldivision genannt. Das Ergebnis sollte 0.05 sein, aber da dies eine ganzzahlige Division ist, wäre das Ergebnis auch ganzzahlig und wie gesagt, ganze Zahlen können keine Dezimalpunktwerte speichern, der nach "." (Dezimalpunkt) wird vollständig ignoriert und daher ist das Ergebnis 0 .

Obwohl Sie das Ergebnis in double umwandeln, macht das keinen Unterschied, denn bevor es tatsächlich in ein double konvertiert wird, ist das Ergebnis bereits 0 und es passiert, dass integer 0 in double konvertiert wird was letztendlich zu 0.0 führt.

2.) Wie erhalten Sie die gewünschte Ausgabe?

Andere Antworten erklären die Lösung sehr gut, deshalb bitte ich Sie, sich auf diese Antworten zu beziehen, anstatt das Rad für Sie neu zu erfinden.

Hoffe, das hilft.

    
this. __curious_geek 05.08.2010 11:50
quelle
2

Weil 5/100 in der Ganzzahl-Division 0 ist. Sie müssen sicherstellen, dass Sie Divisionen im Doppel durchführen.

    
James 05.08.2010 11:43
quelle
2

5/100 ist Ganzzahlarithmetik. Um doppelte Genauigkeit zu haben, müssen ein oder mehrere der Werte verdoppelt werden.

%Vor%

oder

%Vor%     
Jerod Houghtelling 05.08.2010 11:49
quelle
1

Doppelvariable = 5D / 100D;

    
KristoferA 05.08.2010 11:45
quelle
0

also hier wäre meine überarbeitete "überlegte" Antwort ...

Da wir nicht wissen, welcher 'Typ' der Variable als Zähler ankommt, müssen wir Double.TryParse verwenden. Im Labor könnten wir so etwas kochen:

%Vor%

jetzt unter dem Schreibtisch versteckt - nur für den Fall, dass ich etwas anderes offensichtlich übersehen habe !! :)

Jim

    
jim tollan 05.08.2010 12:19
quelle
-3

Marco,

versuche dies stattdessen:

%Vor%

Jim

[späte Änderung] - Wie bereits erwähnt (durch stille Wähler :)) ist der Einsatz des Konverters redunant. Es sollte offensichtlich in ähnlicher Weise wie die anderen Einträge erfolgen. Ich erkenne das an, aber laß es oben als ein Beispiel, wie man bei der schnellen Beantwortung einer Frage schnell downvotet wird ... lass Vorsicht dein Meister sein!

Da wir auch nicht wissen, ob die Variable aus einer Zeichenkette oder einer Zahl kommt, sollte er auch Tryparse usw. auf der ersten Zahl vor der Berechnung betrachten.

    
jim tollan 05.08.2010 11:43
quelle

Tags und Links