Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: VCL (C++ Builder) ::  Nicht float, sondern decimal     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
FDX
Unregistrierter




Beitrag FDX Unregistrierter 14:55:37 05.03.2010   Titel:   Nicht float, sondern decimal            Zitieren

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?
akari
Moderator

Benutzerprofil
Anmeldungsdatum: 27.11.2004
Beiträge: 11271
Beitrag akari Moderator 15:04:34 05.03.2010   Titel:              Zitieren

Hallo

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!
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24352
Beitrag volkard Moderator 16:03:15 05.03.2010   Titel:              Zitieren

akari schrieb:
Hallo

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.

_________________
http://www.venganza.info/
plonk fürs Forum v1.02


Zuletzt bearbeitet von volkard am 16:05:20 05.03.2010, insgesamt 1-mal bearbeitet
witte
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2008
Beiträge: 1295
Beitrag witte Mitglied 17:30:10 05.03.2010   Titel:              Zitieren

volkard schrieb:
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?
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24352
Beitrag volkard Moderator 19:35:03 05.03.2010   Titel:              Zitieren

witte schrieb:
volkard schrieb:
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.

_________________
http://www.venganza.info/
plonk fürs Forum v1.02
Braunstein
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2002
Beiträge: 6734
Beitrag Braunstein Mitglied 20:50:34 05.03.2010   Titel:              Zitieren

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.

und hier etwas schöner (ganz oben)
http://www.digitalsignallabs.com/papers.htm
-=]xXx[=-
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2003
Beiträge: 456
Beitrag -=]xXx[=- Mitglied 13:02:05 07.03.2010   Titel:              Zitieren

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!
Jansen
Moderator

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 14520
Beitrag Jansen Moderator 14:03:26 07.03.2010   Titel:              Zitieren

Die Mehrwertsteuer wird auf die Gesamt-Nettosumme einer Rechnung erhoben, also B.

_________________
Jansen (Mod nur im BCB-Forum)
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24352
Beitrag volkard Moderator 15:09:52 07.03.2010   Titel:              Zitieren

-=]xXx[=- schrieb:
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€

Scherzkeks.
2,99*100/0,81=369,14
369,14-2,99*100=70,14

_________________
http://www.venganza.info/
plonk fürs Forum v1.02
KlausB
Moderator

Benutzerprofil
Anmeldungsdatum: 02.04.2001
Beiträge: 2321
Beitrag KlausB Moderator 17:01:55 07.03.2010   Titel:              Zitieren

Hallo

noch besserer Scherzkeks :D

2,99 * 100 = 299,00
MwSt = 299,00 * 0,19 = 56,81
ges: 355,81

:cool:

Mfg
Klaus
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24352
Beitrag volkard Moderator 17:09:50 07.03.2010   Titel:              Zitieren

Aber
56,81/355,81=0,1597=15,97%
, ich glaube, das Finanzamt würde mich hauen, wenn im Verkaufspreis von 355,81 nur 16% Mehrwertsteuer drin wären.

_________________
http://www.venganza.info/
plonk fürs Forum v1.02
VergissEs
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2001
Beiträge: 1019
Beitrag VergissEs Mitglied 18:43:39 07.03.2010   Titel:              Zitieren

volkard schrieb:
Aber
56,81/355,81=0,1597=15,97%
, ich glaube, das Finanzamt würde mich hauen, wenn im Verkaufspreis von 355,81 nur 16% Mehrwertsteuer drin wären.


Schlagen würden die dich nicht, aber sicher richtig nachrechnen:

355,81 / 1,19 = 299,00
299,00 * 0,19 = 56,81

und dann kommen die auf die 19% ;)

_________________
MfG
VergissEs
maikmueller
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.04.2005
Beiträge: 212
Beitrag maikmueller Mitglied 12:14:33 09.03.2010   Titel:              Zitieren

...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...

Wäre toll wenn jemand kurz Helfen könnte...

Gruss

Maik
akari
Moderator

Benutzerprofil
Anmeldungsdatum: 27.11.2004
Beiträge: 11271
Beitrag akari Moderator 12:44:24 09.03.2010   Titel:              Zitieren

Hallo

akari schrieb:
In Builder gibt es den Datentyp Currency, der eine Festkommazahl darstellen soll.


bis bald
akari

_________________
In der nächsten Version wird alles besser!
berniebutt
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2007
Beiträge: 2219
Beitrag berniebutt Mitglied 14:40:42 09.03.2010   Titel:              Zitieren

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.

_________________
http://berniebutt.npage.de
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24352
Beitrag volkard Moderator 14:34:26 10.03.2010   Titel:              Zitieren

VergissEs schrieb:
volkard schrieb:
Aber
56,81/355,81=0,1597=15,97%
, ich glaube, das Finanzamt würde mich hauen, wenn im Verkaufspreis von 355,81 nur 16% Mehrwertsteuer drin wären.


Schlagen würden die dich nicht, aber sicher richtig nachrechnen:

355,81 / 1,19 = 299,00
299,00 * 0,19 = 56,81

und dann kommen die auf die 19% ;)

Nimm einfach mal einen Kassenbon und rechne nach, ub Du mit Deiner Rechnung 16% oder 19% hast.

_________________
http://www.venganza.info/
plonk fürs Forum v1.02
-=]xXx[=-
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2003
Beiträge: 456
Beitrag -=]xXx[=- Mitglied 14:43:24 10.03.2010   Titel:              Zitieren

volkard schrieb:
VergissEs schrieb:
volkard schrieb:
Aber
56,81/355,81=0,1597=15,97%
, ich glaube, das Finanzamt würde mich hauen, wenn im Verkaufspreis von 355,81 nur 16% Mehrwertsteuer drin wären.


Schlagen würden die dich nicht, aber sicher richtig nachrechnen:

355,81 / 1,19 = 299,00
299,00 * 0,19 = 56,81

und dann kommen die auf die 19% ;)

Nimm einfach mal einen Kassenbon und rechne nach, ub Du mit Deiner Rechnung 16% oder 19% hast.

Hä?

Code:
Gesamtsumme:
€ 56,85*
inkl. 19% MwSt. € 9,08
Code:
Gesamtsumme:
€ 56,85*
inkl. 19% MwSt. € 9,08
Code:
Gesamtsumme:
€ 56,85*
inkl. 19% MwSt. € 9,08


(Gesamtsumme - MwSt) * 0,19 = 9,0763
=> Die MwSt sind 19%, nix mit 16...

Edit: Oder is mein Ironiedetektor hinüber?

_________________
Wer nichts macht, macht auch nichts falsch!


Zuletzt bearbeitet von -=]xXx[=- am 14:44:43 10.03.2010, insgesamt 1-mal bearbeitet
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24352
Beitrag volkard Moderator 14:53:44 10.03.2010   Titel:              Zitieren

-=]xXx[=- schrieb:
Edit: Oder is mein Ironiedetektor hinüber?

Nein. Ich kann einfach keine Prozentrechnung. Muß mal meinen Mathelehrer danach fragen.

_________________
http://www.venganza.info/
plonk fürs Forum v1.02
witte
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2008
Beiträge: 1295
Beitrag witte Mitglied 15:05:29 10.03.2010   Titel:              Zitieren

Fowler hat sich mal Gedanken um eine "perfekte" Money-Klasse gemacht. Hier hat sich ein Student dran versucht:
https://kaul.inf.fh-brs.de/wiki2/index.php/Money
berniebutt
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2007
Beiträge: 2219
Beitrag berniebutt Mitglied 15:15:15 10.03.2010   Titel:              Zitieren

@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!

_________________
http://berniebutt.npage.de


Zuletzt bearbeitet von berniebutt am 16:09:27 10.03.2010, insgesamt 1-mal bearbeitet
VergissEs
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2001
Beiträge: 1019
Beitrag VergissEs Mitglied 15:24:53 10.03.2010   Titel:              Zitieren

volkard schrieb:
VergissEs schrieb:
volkard schrieb:
Aber
56,81/355,81=0,1597=15,97%
, ich glaube, das Finanzamt würde mich hauen, wenn im Verkaufspreis von 355,81 nur 16% Mehrwertsteuer drin wären.


Schlagen würden die dich nicht, aber sicher richtig nachrechnen:

355,81 / 1,19 = 299,00
299,00 * 0,19 = 56,81

und dann kommen die auf die 19% ;)

Nimm einfach mal einen Kassenbon und rechne nach, ub Du mit Deiner Rechnung 16% oder 19% hast.


Kommt auf den Rechenweg an.
Rechnet man Finanziell (was ja bei einem Kassenbon üblich ist) also mit Netto+Tara=Brutto dann kommt 19% raus.

Rechnet man als Mathematker "ala" nun ist das Brutto die 100% dann kommen die 15,97% raus.

Und was sagt uns das jetzt ?

Als Mathematiker muss man nur die 15,97% bezahlen alle anderen 19%, also Leute alle Mathematik studieren dann müsst Ihr weniger Steuern zahlen :o)

_________________
MfG
VergissEs
Unregistrierter





Beitrag Unregistrierter 16:15:38 10.03.2010   Titel:              Zitieren

Nun ja, meiner bescheidenen Meinung nach sollten beide auf das gleiche Ergebnis kommen.

volkard schrieb:
Aber
56,81/355,81=0,1597=15,97%
, ich glaube, das Finanzamt würde mich hauen, wenn im Verkaufspreis von 355,81 nur 16% Mehrwertsteuer drin wären.

Wie VergissEs schon geschrieben hat, gehst Du einfach von der falschen Basis aus. Die 355.81 sind nicht 100%, sondern 119%, da schon inkl. MwSt.
berniebutt
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2007
Beiträge: 2219
Beitrag berniebutt Mitglied 16:24:24 10.03.2010   Titel:              Zitieren

@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.

_________________
http://berniebutt.npage.de
VergissEs
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2001
Beiträge: 1019
Beitrag VergissEs Mitglied 16:45:29 10.03.2010   Titel:              Zitieren

berniebutt schrieb:
@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 :o) 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!

_________________
MfG
VergissEs
berniebutt
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2007
Beiträge: 2219
Beitrag berniebutt Mitglied 10:01:05 11.03.2010   Titel:              Zitieren

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. :leak:

_________________
http://berniebutt.npage.de
VergissEs
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2001
Beiträge: 1019
Beitrag VergissEs Mitglied 11:08:56 11.03.2010   Titel:              Zitieren

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. :leak:


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.

_________________
MfG
VergissEs
C/C++ Forum :: VCL (C++ Builder) ::  Nicht float, sondern decimal   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.