kaufmännisch runden und Problem bei Werteübergabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

RicmanX hat geschrieben:Das Problem ist ja das man mit den Zahlen - ich zumindest - weiterrechnen muss, und Genauigkeit ist auch notwendig.
Und wenn ich ne Zahl mit zehn Nachkommastellen hab, ist das genauso schlecht wie wenns 50 auch nur um nicht sehr viel falsch ist... alle andern Sprachen können schließlich rechnen, das und das Python nur auf wenigen Servern installiert ist ist mE das einzige Manko an Python.
Also das mußt du mir vorrechnen, daß eine Abweichung von 10E-7 (sprich zehn hoch minus sieben = 0,0000001) sich noch signifikant bemerkbar macht. Jedenfalls nicht, wenn's um Währungsrechnung geht. Bei physikalischen Berechnungen kann das etwas anders aussehen.

Du kannst natürlich Cobol einsetzen (gibt's bei www.thekompany.com als Kobol). Da mußt du dein Ergebnis forher genau definieren, z. B. mit PIC 99999.99 Wenn Du mit einem derartigen Zwischenergebnis weiterrechnest, dann steht irgendwann dein Chef auf der Matte, denn da sind die Abweichungen größer als bei Floatingpoint.

Im übrigen rechen die Programme nicht mit einer festen Anzahl an Nachkommastellen, sondern mit signifikanten stellen, d. h. je mehr Vorkommastellen, desto weniger Nachkommastelen sind exakt darstellbar. Das kann dir aber ein Informatiker bestimmt besser auseinanderpflücken als ich.

Hans
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

Nee, geht um Dateigrößen. Und wenn ich sag auf 1 oder 2 Stellen runden und es kommen öfters mal 9 Nachkommastellen raus, ist das ziemlich dumm. Zumal sich das nachm addieren aller auch nicht auf 2 Stellen mehr runden lassen will, und abschneiden will ich nicht grad. Bloß wenn ichs dann so anzeigen lassen würde, wie sähe das denn aus??

(Ich weiß klingt irgendwie pedantisch, aber Ordnung muss sein :P)
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

RicmanX

Rechnen ist die eine Sache, darstellen eine andere.

Code: Alles auswählen

print "%d" % 1.500001 #druckt 1!!!!!
print "%.0f" % 1.500000001 # gibt 2
Hans
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,

das Ganze geht auch ohne Print:

Code: Alles auswählen

>>> a = "%4.2f" % 1.49999999
>>> print a
1.50
so kann es natürlich auch in einer GUI verwendet werden.


Dookie
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Jo ich weiß, aber daran denken, daß a * 2 nicht 3.00 ergibt.

Code: Alles auswählen

>>> a="%.2f" % 1.4999999999
>>> b=2*a
>>> print a
1.50
>>> print b
1.501.50
>>>
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

wo ihr schon dabei seid:

ich habe eine rechnung mit round(x, 2) und bekomme dann wie schon erwähnt z.b. 3.333332 oder so.
wie kann ich mit nur 2 stellen z.b weiterrechnen (also 3.33)
wär super wenn mir das jemand sagen kann ;)

thx
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Also ich kenn keine Sprache, die Fließkommazahlen 100% richtig rechnet. Python ist da schon seh nahe.

*kram* "Ach da hab ichs..."
Aus einer Signatur am Delphi Forum::
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!

Warum wohl :D ?
TUFKAB – the user formerly known as blackbird
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi nochmal,

eine kleine Verbesserung, zumindest was das Rechnen mit Dezimalzahlen z.B. Geldbeträgen etwas genauer macht ist mit Python2.4 in sicht. Dort gibt es den Datentyp decimal der wohl intern mit bcd-zahlen (binary coded decimal) arbeitet.
(10.0 / 3.0) * 3.0 ist aber auch dann noch 9.999999999


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Antworten