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:

Donnerstag 17. Oktober 2002, 22:08

Jetz muß ich doch auch mal wieder mitmischen :D

wie weit ist 1,39999999999 von 1,40 entfern? Denke, der Fehler ist vernachlässigbar klein. Und wenns beim Ausdruck stört dann schreib doch

Code: Alles auswählen

print '%8.2f" % 1.4999999999999'
Ich weiß nicht ob es sich lohnt, den Differenzbetrag auf mein Konto zu überweisen:D

Hans
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Donnerstag 17. Oktober 2002, 22:21

Hallo!
RicmanX hat geschrieben:>>> round(1.35,1)
1.3999999999999999
Dafür reicht schon Folgendes:
>>> 1.0/10
0.10000000000000001
>>>

Aber das liegt nun mal in der Natur der Sache, sprich der internen Darstellung von Fließkommazahlen.

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

Donnerstag 17. Oktober 2002, 22:34

Ich weiß daß das sp ist, auch wenn ich nicht weiß wie man Fließkomma in Biär darstellt. Das tut aber auch nichts zu Sache. Nur diese Pfennigsfuchserei.....

Ich hole mal gerade mein altes Lehrbuch (Küster Thiel Fischbeck, Logarithmische Rechentafeln, 100. Auflage, 1969)
Der Mangel an mathematischer Bildung gibt sich durch nichts so auffallend zu erkennen, wie durch maßlose Schärfe im Zahlenrechnen

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

Freitag 18. Oktober 2002, 10:01

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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 18. Oktober 2002, 13:52

Hi RicmanX,
RicmanX hat geschrieben:alle andern Sprachen können schließlich rechnen
Welche?
Lass mal

Code: Alles auswählen

((10.0*3.0)/3.0)-((10.0/3.0)*3.0)
berechnen.
Und dann sag mir bei welcher Sprache das richtige Ergebnix nämlich 0.0 rauskommt.


Gruß

Dookie

P.S.: ich habs grad mit Python probiert, und wundersamerweise kommt 0.0 raus :D
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Freitag 18. Oktober 2002, 19:12

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:

Samstag 19. Oktober 2002, 11:10

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:

Samstag 19. Oktober 2002, 13:21

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:

Samstag 19. Oktober 2002, 13:45

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:

Samstag 19. Oktober 2002, 20:27

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

Freitag 12. November 2004, 14:27

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:

Freitag 12. November 2004, 14:54

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:

Freitag 12. November 2004, 16:12

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