2016-03-19 14 views
-2

ich einige Berechnungen machen und das Ergebnis ist 0,000137 * 0,000137 = 0,000000018769Float-Typ wird als exp gespeichert

ich die Antwort in float y speichern

aber es scheint, als 1.88788682e-008 zu speichernden

ich möchte es als 0,000000018769

ich den Typ double bekam aber

int main() 
{ 
float y= 0.000137*0.000137; 

return 0; 

} 
Antwort gleiche versucht, um gerettet werden

y erscheint in der Uhr während des Debuggens als 0,000137 * 0,000137

+0

Wie Sie „Speichern“ es und wo? Zeigen Sie etwas Code. –

+0

Ich meine float y = 0,000137 * 0,000137 @ SamiKuhmonen – Maram

+1

Wir können nicht den Fehler im Code, den wir nicht sehen können, hinweisen. –

Antwort

-1

Es ist immer gleich gespeichert und diese Zahlen sind äquivalent

Wenn Sie mit cout drucken, diese Referenz zu Seite cout Formating überprüfen

http://www.cplusplus.com/reference/ios/fixed/

+0

Wie ist 1.887886282e-8 "äquivalent" zu 0.000000018769? –

+0

Oh Entschuldigung, ich habe gerade die exponentielle Notation als Differenz gesehen, es ist wahrscheinlich Float Limits Fehler, weil deine Konstanten Double sind und dann werden sie zum floaten –

+0

Es gibt viel Präzision in einem 'float' für fünf signifikante Zahlen. –

1

Sie haben nicht wirklich Kontrolle darüber, wie Gleitkommazahlen gespeichert sind (was meistens irrelevant ist). Sie haben jedoch Kontrolle darüber, wie sie gedruckt werden. Wenn Sie sie aus, ohne die wissenschaftliche Schreibweise drucken möchten, können Sie std::fixed benutzen Sie, dass:

int main() { 
    float y = 0.000137*0.000137; 
    std::cout << std::fixed << std::setprecision(12) << y << "\n"; 
} 

Ergebnis:

0.000000018769