In C++Builder soll es den Datentyp decimal geben. Ich möchte mathematisch korrekt rechnen und float ist bei der Aufsummierung von Nachkommestellen nicht wirklich korrekt. Ich würde mir mit decimal bessere Ergebnisse erhoffen, finde aber den Datentyp nicht. Benötigt man eine extra Klasse dafür? Hat jemand ein Beispiel?
In Builder gibt es den Datentyp Currency, der eine Festkommazahl darstellen soll.
Ich würde aber empfehlen lieber int oder __int64 zu verwenden, und lieber in Cent-Werten statt in Euro-Werten zu rechnen.
bis bald
akari
_________________ In der nächsten Version wird alles besser!
In Builder gibt es den Datentyp Currency, der eine Festkommazahl darstellen soll.
Ich würde aber empfehlen lieber int oder __int64 zu verwenden, und lieber in Cent-Werten statt in Euro-Werten zu rechnen.
bis bald
akari
Decimal hat nichts mit Korrektheit zu tun - es geht um Nachvollziehbarkeit.
Problem 1: Kannst Dich auf den Kopf stellen, wenn Du 1000000000 Euro fair auf drei Parteien verteilen sollst, macht ein Cent verschwindibus.
Problem 2: Es gibt Fälle, wo man gar nicht gut vorhersagen kann, von wo er verschwindet.
Und jetzt haben sich Kunden b4eschwert, daß das Programm falsch rechnet. Da kann man nur Decimal nehmen, denn wenn der Chef, der von Diskreter Mathematik oder von der internen Darstellung von Fließkommazahlen nach IEEE keinebn Schimmer hat, zu Dir geht, und mal genau wissen will, wohin der Cent verschwunden ist, was machste da? Ihn erst auf ne Vorlesung zu DM schicken? Oder sagen "Lies erstmal http://de.wikipedia.org/wiki/Gleitkommazahl . Erst danach bin ich bereit, mich mit Dir darüber zu unterhalten." Nö, ich denke, das wäre nicht so toll.
Decimal bringt's, denn nun rechnet der Rechner bis in die letzte Stelle wie in der Grundschule und ist Chefkompatibel. Fehler kann man jagan, nachvollziehen und erklären.
Aber Decimal ist nicht korrekter als was anderes. Es ist nur für Außenstehende leichter nachzuvollziehen, dafür frißt es 10-mal mehr Rechenzeit.
Decimal hat nichts mit Korrektheit zu tun - es geht um Nachvollziehbarkeit.
Problem 1: Kannst Dich auf den Kopf stellen, wenn Du 1000000000 Euro fair auf drei Parteien verteilen sollst, macht ein Cent verschwindibus.
Und wie löst das decimal? In dem es dir sagt dass du einen Cent durchzusägen hast?
Decimal hat nichts mit Korrektheit zu tun - es geht um Nachvollziehbarkeit.
Problem 1: Kannst Dich auf den Kopf stellen, wenn Du 1000000000 Euro fair auf drei Parteien verteilen sollst, macht ein Cent verschwindibus.
Und wie löst das decimal? In dem es dir sagt dass du einen Cent durchzusägen hast?
Indem es sich ganz normal verrechnet, nämlich nicht anders, als der Chef, der es auf einem Blatt Papier mal nachrechnet.
Wenn euch das Thema Festkommaarithmetik so interessiert habe ich hier mal zwei Links für euch
Allgemeine Erläuterung
http://en.wikipedia.org/wiki/Fixed-point_arithmetic
Die englische Version ist besser als die deutsche.
Da schließt sich für mich mal eine Frage an:
Wenn ich eine Rechnung schreibe über einen Artikel für 2,99€ zzgl. 19% Steuer und davon 100Stk., wie berechne ich die Steuer richtig?
A)
2,99€*0,19 = 0,57€
0,57€ * 100Stk. = 57€
oder
B)
2,99€*100*0,19 = 56,81€
mfg
xXx
_________________ Wer nichts macht, macht auch nichts falsch!
Da schließt sich für mich mal eine Frage an:
Wenn ich eine Rechnung schreibe über einen Artikel für 2,99€ zzgl. 19% Steuer und davon 100Stk., wie berechne ich die Steuer richtig?
...ein Thema mit dem ich mich auch gerade rumschlage, aber zurück zur Frage, wie lautet denn nun der genaue Datentyp, "decimal" bzw. "Decimal" kennt der Builder ja nicht...
Currency ist kein echter Datentyp, sondern eine Struktur mit zwei Integers für Vorkomma- und Nachkommastellen. Die Anzahl der Nachkommastellen soll auf 4 beschränkt sein. Ist für Dinge mit Geld gedacht. Löst aber auch nicht alle Probleme. Z.B. bei Zinsberechnungen gibt es nun einmal leicht viele Nachkommastellen. Irgendwo muss bei Integer etwas "verschwinden". Ich bleibe bei float und double und runde selbst, wo ich es für nötig befinde.
Hier soll schon einmal ein Bankangestellter die "abgeschnittenen" Zinserträge zu seinem Gunsten addiert und auf sein eigenes Konto überwiesen haben. Musste nur noch die Überweisung aus dem Datenbestand entfernt und ein anderes Bankprogramm ohne "Abschneidung" angepasst werden. Ist aber aufgefallen!
Das Thema liegt darin: Rechnen kann man beliebig genau. Die Bewegungen auf einem Konto sind aber auf Cent begrenzt.
@volkard Der Mathelehrer hat gesagt: Prozent heisst 'Anteil von Hundert'. Wenn du 100 Hühner hast und 10% davon legen täglich ein Ei, so hast du 10 Eier jeden Tag. 10,5 % Hühner können aber keine Eier legen, weil es weder halbe Hühner noch halbe Eier gibt. So ähnlich ist das mit allen Berechnungen bei Geldbeträgen auch, wenn alles auf ganze Cent sein soll. Hierin liegt die Frage!
@VergissEs Deinen Beitrag kannst du echt vergessen - wie dein Name schon sagt! Das lernt man doch auch in der Schule, Prozent wovon?
Fällt mir gerade so ein, was der in Mathe schwache ehemaliger Schüler zu seinem Mathelehrer gesagt hatte. Der Schüler fuhr inzwischen Mercedes, der Lehrer immer noch Fahrrad. Sehen Sie, ich kaufe Ware für 100 Euro ein und verkaufe die für 300 Euro weiter. Von diesen 3% lebe ich.
@VergissEs Deinen Beitrag kannst du echt vergessen - wie dein Name schon sagt! Das lernt man doch auch in der Schule, Prozent wovon?
@berniebutt
auf deine Antwort passt auch mein Nickname zu "VergissEs".
Scheinbar hast du nur den Nicknamen gelesen ohne den geschriebenen Text durch zu lesen! Und beim letzten Satz den nicht berücksichtigt.
Und ja ich weiss Prozent wovon? ich auf meinen Rechnungen schreibe!
Aber scheinbar weisst du nicht das die Umsatzsteuer immer vom Netto aus geht
also sich dein Prozent wovon? hiermit dich ins absurdum führt!
Mit der Frage geht es nicht um die Berechnung von Mehrwertsteuer allein, sondern darum, "krumm" berechnete Geldbeträge auf Cent darzustellen und was mit den Teilbeträgen von Cent passieren soll? Float, Integer, Currency waren genannt. Alle sind geeignet und lassen dennoch Fragen offen. Vier Bonbons sind nun einmal schlecht an drei Kinder zu verteilen. Hier ist die Problematik besser vorstellbar als mit Geldbeträgen.
@VergissES: Die Mehrwertsteuer für Netto- oder Bruttobeträge berechnen zu können, ist nun wirklich keine Sache, die man lange diskutieren sollte. Wer Rechnungen schreiben kann, der kann auch die in Bruttobeträgen enthaltene Mehrwertsteuer ermitteln.
Scheinbar hast du immer noch nicht verstanden auf was ich geantwortet habe!
Hier nochmal für DICH das Zitat:
volkard schrieb:
Nimm einfach mal einen Kassenbon und rechne nach, ub Du mit Deiner Rechnung 16% oder 19% hast.
Evtl. hast du ja übersehen das ich das sogar in dem Beitrag zitiert habe,
aber nein jetzt auch noch mit ala teile 4 Bonbons auf 3 Personen
Grundschulwissen meine Antwort als falsch hinstellen, wobei das mit keinen Wort
in meinen Betrag erwähnt wurde!
So jetzt lese bitte nochmal das Zitat
volkard schrieb:
Nimm einfach mal einen Kassenbon und rechne nach, ub Du mit Deiner Rechnung 16% oder 19% hast.
und nun nochmal deinen Beitrag
berniebutt schrieb:
@VergissES: Die Mehrwertsteuer für Netto- oder Bruttobeträge berechnen zu können, ist nun wirklich keine Sache, die man lange diskutieren sollte. Wer Rechnungen schreiben kann, der kann auch die in Bruttobeträgen enthaltene Mehrwertsteuer ermitteln.
Scheinbar gibt es hier dennoch defizit!
Aber das hast du leider noch nicht Nachvollziehen können,
wobei man bei volkard eigentlich davon ausgehen kann, das er sich grade von
dem Computer krümmt vor lachen was er da grade ausgelöst hat.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.