Rechnen mit Int()

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
psp
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Do, 22. Okt 2009 13:42
Kontaktdaten:

Rechnen mit Int()

Beitrag von psp »

Hallo,

ich habe aktuell ein kleines Problem, das könnte ich mit 1#1 ganz kurz und knapp erklären.

Im Detail stellt es sich wie folgt dar. Ich möchte aus einem Datenbankfeld einen Wert in eine Schnittstellen-Datei schreiben. Hierzu versteht die Schnittstelle keine Komma-Stellen, so dass man hierbei festgelegt hat, dass man den Wert mit 100 multipliziert ausgibt.

Dies zeigt sich im Quelltext wie folgt:

Code: Alles auswählen

cspeicher+=str(int(dbf->gutstk*100),8)
In meinem Problemfall steht 4,60 im Datenbankfeld und das Programm gibt 459 in der Schnittstelle aus. Ich habe gehofft, dass irgendwo der Wert 4,59 auftaucht, aber ich konnte die Buchung bis zum Ursprung rückverfolgen und habe an jeder Stelle 4,60 gefunden. Mehr Nachkomma-Stellen gibt es nicht, da hier 8,2 in der Struktur festgelegt ist.

Ich hatte das in ähnlicher Weise schon vor über 2 Jahren einmal in einer Lohnschnittstelle, konnte aber gelöst werden. Hier das Ergebnis:

Code: Alles auswählen

csatz+=STR(dbf->zeitwert*100,8,0)
Viel Erfolg beim Rechnen mit Int()!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Rechnen mit Int()

Beitrag von UliTs »

Hallo psp,

str() rundet das Ergebnis, währen int() die Nachkommastellen "abhackt". Da 4,60 zwar in einer DBF-Tabelle exakt gespeichert werden kann, jedoch nicht als Real-Wert (hat im 2er-System unendlich viele Nachkommastellen :shock: ), kann es mit int() nicht immer funktionieren!
Eine korrekte Lösung mit int() lautet folglich z.B.:

Code: Alles auswählen

cspeicher+=str(int(dbf->gutstk*100+0.5),8)
Gruß

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten