mein float ist keine Fliesskommazahl
-
Es geht um die Variable mwsts diese soll mit z.b 7.6 gefüllt werden.
mit double ok
mit float nok#include <iostream.h> #include <stdlib.h> int main() { float NBetrag; double mwsts; float mwst; cout << "Bitte Netto Betrag eingeben\n"; cout << "Netto Betrag:"; cin >> NBetrag; cout << "\n"; cout << "Bitte MwSt. Satz eingeben:\n"; cin >> mwsts; cout << mwsts; cout << "\n"; NBetrag = ((NBetrag/100)*mwsts); cout << NBetrag; system("PAUSE"); return 0; }
-
Also bei dem Programm fällt mir nur ein Fehler auf - es heißt
include <iostream>
. Ansonsten solltest du mal erklären, was hier welche falschen Werte produziert.
-
hab deine Nachricht zu spät gesehn, erklärt das das Problem?
-
Nicht wirklich. Und ehrlich gesagt kann ich mir auch nicht erklären, daß cin Probleme mit float-Eingaben haben sollte.
-
Das heisst, es müsste mit float funktionieren?
-
das problem könnte diese zeile sein:
NBetrag = ((NBetrag/100)*mwsts)ich bin gerade mit der reihenfolge nicht ganz sicher, aber hier könntest du mit die division durch eine ganze zahl eine implizite umwandlung von NBetrag von float nach int durchführst.
probier mal folgendes:
NBetrag = ((NBetrag/100.0)*mwsts)edit: wobei das nicht erklärt, warum das mit double funktioniert...
-
ghorst schrieb:
ich bin gerade mit der reihenfolge nicht ganz sicher, aber hier könntest du mit die division durch eine ganze zahl eine implizite umwandlung von NBetrag von float nach int durchführst.
bestimmt nicht - wenn Gleitkomma-Zahlen beteiligt sind, wird auch in Gleitkomma-Arithmetik gerechnet.
PS: Ich könnte mir noch vorstellen, daß du deine Variablennamen durcheinandergebracht hast ('mwst' eingelesen und dann mit 'mwsts' weitergerechnet).
-
dafür das das immer und automatisch gemacht wird, hatte ich schon sehr viel spaß damit...
-
ghorst schrieb:
dafür das das immer und automatisch gemacht wird, hatte ich schon sehr viel spaß damit...
Wenn du weißt, wann und wo die Typumwandlung stattfindet, ist das alles kein Problem
Problematisch wird es nur, wenn du diesen Mechanismus überschätzt - der wird nämlich nicht auf die gesamte Formel angewendet, sondern auf jeden Teilausdruck gesondert:
float x = 2 / 5h + 3.5;
hier passiert folgendes:
- '5h' wird umgewandelt in einen int
- Ganzzahldivision 2/5
- das Ergebnis (0) wird nach double umgewandelt
- Gleitkomma-Addition 0.0+3.5
- das Ergebnis (3.5) wird zurückgewandelt nach float (und x mit 3.5f initialisiert)
(der letzte Schritt könnte eine Compilerwarnung über den Genauigkeitsverlust der Umwandlung einbringen)
-
Hallo
Ich habs gefunden, dank an ghorst, es war eine verdrehung, warum es mit double "funktioniert" weiss ich nicht.
Egal danke für die Hilfe