Warum gibt C# Konvertieren.ToDouble(5/100) 0.0 und 0.05 nicht
double variable = Convert.ToDouble(5/100);
Zurück 0.0 aber ich erwartete 0.05
Was kann /muss ich ändern um 0.05
weil die 5 in diesem Beispiel wird eine variable
- Können wir einen größeren Teil des Codes, für mich funktioniert es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
5/100
erfolgt in integer-Arithmetik, die Ausbeuten 0 vor Konvertierung. VersuchenWenn
5
ist in einer Variablenx
(vom Typ integer), und dann benutzen:oder
machen die Absicht klar (danke, John!)
oder
Convert.ToDouble
auf einen Ausdruck, der die bereits ein doppelter. Warum?1.) Warum verhält Sie sich so ?
Beachten Sie, dass ganze zahlen sind ganze zahlen und die Variablen von Typ Ganzzahl speichern nur ganze zahlen und kann nicht speichern oder erkennen Dezimalzahlen. wenn Sie sagen, 5/100, beide 5 und 100 integer-Literale für die Computer-und it-berufen ist integer-division. Sollte das Ergebnis 0.05 aber denn dies ist eine integer-division ist das Ergebnis auch integer sein und als ich sagte, ganze zahlen nicht speichern Komma-Werte, die nachfolgende Teil nach "." (Dezimalpunkt) wird komplett ignoriert und somit ist das Ergebnis 0.
Hinzufügen mehr, um diese, wenn Sie konvertieren, das Ergebnis zu verdoppeln, es macht keinen Unterschied, weil , bevor es tatsächlich in ein Doppel-das Ergebnis ist bereits 0 und es kommt zu wandeln ganze Zahl von 0 bis Doppel, die letztlich dazu führt, 0.0.
2.) So erhalten Sie Ihre gewünschte Ausgabe ?
Anderen Antworten erklären, die Lösung sehr gut, so dass ich bitten Sie beziehen sich auf die Antworten und nicht die neu-Erfindung des Rades für Sie.
Hoffe, das hilft.
Weil 5/100 in ganzzahligen division 0 ist. Sie müssen sicherstellen, dass Sie tun, die Teilung verdoppelt.
5/100 ist integer-Arithmetik. Um double-precision-einer oder mehrere der Werte müssen verdoppelt werden.
oder
double variable = 5D /100D;
so, hier wäre meine überarbeitete 'als' Antwort...
da wir nicht wissen, was " Art " variable kommt als Zähler hätten wir mit dem Doppel.TryParse an. Im Labor wir Kochen konnten so etwas wie dies:
nun versteckt unter dem Schreibtisch - nur für den Fall habe ich übersehen, etwas anderes auf der Hand! 🙂
jim
Marco,
versuchen Sie dies:
jim
[Ende edit] - wie wurde darauf hingewiesen (von silent-Wähler :)) die Verwendung der Convert ist redunant. Es sollte offensichtlich sein, getan in einer Weise ähnlich zu den anderen Einträgen. Ich bestätige, dass aber lassen Sie es in den oben als Beispiel, wie man schnell downvoted, wenn die Beantwortung einer Frage in Eile... lassen Sie Vorsicht seien Sie Ihr master!!
Ebenso, wie wir nicht wissen, ob die Variablen kommen aus einem string oder eine Zahl, er sollte auch berücksichtigen, tryparse usw. auf die Nummer 1. bevor Sie die Arithmetik.
Convert
und nicht-offensichtliche (hat casting Vorrang vor der division oder der division zum ersten mal getan?)