{"id":55000318,"date":"2016-10-01T00:00:00","date_gmt":"2020-06-24T16:34:57","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=318"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Waehrungen_runden","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html","title":{"rendered":"W&auml;hrungen runden"},"content":{"rendered":"<p class='introduction'>Im Finanzsektor wird alles sehr genau genommen. Wird &uuml;ber kleinere Rundungsfehler an anderer Stelle gern einmal hinweggesehen, so sind hier Inkonsistenzen in der Regel absolut inakzeptabel. Einzelne Cent-Betr&auml;ge k&ouml;nnen sich &uuml;ber Millionen von Datens&auml;tzen zu gr&ouml;&szlig;eren Summen aufaddieren. Wohin Sie genau schauen m&uuml;ssen, um solche Umst&auml;nde zu vermeiden, untersuchen die folgenden Ausf&uuml;hrungen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1605_Runden.accdb<\/b><\/p>\n<h2>Geldbetr&auml;ge im Tabellenentwurf<\/h2>\n<p>F&uuml;r Zahlen mit Nachkommastellen kommen unter Access im Prinzip vier Datentypen infrage: <b>Single<\/b>, <b>Double<\/b>, <b>Currency<\/b> und <b>Decimal<\/b>, also Flie&szlig;kommazahl einfacher und doppelter Genauigkeit, sowie W&auml;hrungs- und Dezimaltyp.<\/p>\n<p><b>Single<\/b> scheidet wegen der geringen Genauigkeit aus. Hier werden zur Speicherung nur vier Bytes verwendet, w&auml;hrend der <b>Double<\/b>-Typ acht Bytes ben&ouml;tigt. Wie gro&szlig; der Unterschied letztlich ist, k&ouml;nnen Sie mit einem kleinen Test im VBA-Direktfenster ermitteln. Lassen Sie sich die Ergebnisse dieser beiden Zeilen ausgeben:<\/p>\n<pre>  CSng (Now)\r\n CDbl (Now)<\/pre>\n<p>Die Funktion <b>Now<\/b> gibt das aktuelle Datum samt Uhrzeit aus, wobei diesem <b>Date<\/b>-Typ tats&auml;chlich ein <b>Double<\/b>-Wert unterliegt. <b>CSng<\/b> wandelt den Wert in einen <b>Single<\/b>-Typ um, <b>CDbl<\/b> in einen <b>Double<\/b>-Typ. Sie erhalten nun etwa<\/p>\n<pre>42516,4 (Single)\r\n42516,4020486111 (Double)<\/pre>\n<p>W&auml;ren dies Geldbetr&auml;ge, so betr&uuml;ge die Differenz bereits circa 0,2 Cent!<\/p>\n<p>Die gro&szlig;e Zahl an Nachkommastellen l&auml;sst <b>Double<\/b> als f&uuml;r W&auml;hrungen geeignet erscheinen. Doch immerhin muss es einen Grund geben, warum der Typ <b>Currency<\/b> zus&auml;tzlich zur Verf&uuml;gung steht. Einerseits f&uuml;hrt sein Einsatz dazu, dass in Tabellen auch gleich automatisch das W&auml;hrungszeichen erscheint. Zudem ist die Zahl der Nachkommastellen gleich zwei. Andererseits speichert <b>Currency<\/b> aber Zahlen auch nach einem anderen System. Liegt dem <b>Double<\/b>-Typ mathematisch ein Exponentialsystem zugrunde, hantiert <b>Currency<\/b> mit einer festen Zahl von ganzzahligen Stellen, n&auml;mlich <b>19<\/b>. Die Umwandlung in einen Flie&szlig;kommatyp geschieht hier rein optisch durch Setzen des Kommas an die viertletzte Stelle, also &uuml;ber Division der Ganzzahl durch 10.000. Ergo stehen grunds&auml;tzlich vier Nachkommastellen zur Verf&uuml;gung, w&auml;hrend bei <b>Double<\/b> und <b>Single<\/b> die Zahl der Nachkommastellen variabel ist und von der Gr&ouml;&szlig;e des Betrags abh&auml;ngt.<\/p>\n<p><b>Decimal<\/b> schlie&szlig;lich &auml;hnelt im Ergebnis <b>Currency<\/b>, weil der angezeigt Wert sich durch Division mit einer Zehnerpotenz ergibt. Die Genauigkeit ist sogar noch h&ouml;her, als bei <b>Currency<\/b>. Doch auch hier gilt das gleiche, wie bei <b>Double<\/b> und <b>Single<\/b>: Die Anzahl der Nachkommastellen ist variabel. Au&szlig;erdem kann VBA mit diesem Datentyp schlecht umgehen. Eine Variable vom Typ <b>Decimal<\/b> l&auml;sst sich erst gar nicht deklarieren! Der Typ scheidet damit f&uuml;r W&auml;hrungsrechnungen weitgehend aus.<\/p>\n<p>F&uuml;r eine empirische Studie wurde die Tabelle <b>tblBetraege<\/b> in der Beispieldatenbank angelegt, deren Entwurf sich aus Bild 1 ergibt. Sie simuliert eine Bestelltabelle, wo es zu jeder Position die Anzahl gibt, den eigentlichen Betrag und die Umsatzsteuer (<b>Ust<\/b>, Prozentzahl, <b>Double<\/b>). Der Betrag ist f&uuml;r unseren Versuch &uuml;ber drei Varianten abgebildet. <b>BetragDbl<\/b> ist ein Feld vom Typ <b>Double<\/b>, <b>BetragCur<\/b> ist ein <b>Currency<\/b>-Typ und <b>BetragDez<\/b> von Typ <b>Decimal<\/b>. Zur Kontrolle wurden noch drei <b>Berechnete Felder<\/b> eingef&uuml;gt. <b>SummeDbl<\/b> ist dabei folgender Ausdruck hinterlegt:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/tblBetraege_Design.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/tblBetraege_Design.png\" alt=\"Entwurf der Tabelle tblBetraege mit ihren drei W&auml;hrungsfeldern, sowie darauf bezogenen berechneten Feldern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Entwurf der Tabelle tblBetraege mit ihren drei W&auml;hrungsfeldern, sowie darauf bezogenen berechneten Feldern<\/p>\n<pre>[Anzahl] * [BetragDbl] * (1 + [Ust])<\/pre>\n<p>Ohne eine Abfrage bem&uuml;hen zu m&uuml;ssen, wird damit die Positionssumme gleich im Datenblatt angezeigt. In produktiven Datenbanken sollten Sie von diesen <b>Berechneten Feldern<\/b> aber eher absehen, weil die Anzeige direkter Tabelleninhalte dort zu vermeiden ist. <b>SummeCur<\/b> und <b>SummeDez<\/b> berechnen nach der identischen Formel, beziehen sich aber jeweils auf die Felder <b>BetragCur<\/b> und <b>BetragDez<\/b>.<\/p>\n<p>Um die Tabelle mit Daten zu f&uuml;llen, gibt es die Prozedur <b>GeneriereBetraege<\/b> in der Datenbank. Sie legt 10.000 Datens&auml;tze an und schreibt nach Zufallsprinzip Zahlen in die drei Felder <b>Anzahl<\/b>, <b>Betrag&#8230;<\/b> und <b>Ust<\/b>. Beim Betrag wird &uuml;ber String-Verarbeitung darauf geachtet, dass nur exakt zwei Nachkommastellen generiert werden:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>dBetrag<span style=\"color:blue;\"> As Double<\/span>\r\n<span style=\"color:blue;\">Dim <\/span>sBetrag<span style=\"color:blue;\"> As String<\/span>\r\ndBetrag = 100 * Rnd\r\nsBetrag = CStr(Val(dBetrag * 100) \/ 100)\r\nrs!BetragDbl.Value = sBetrag<\/pre>\n<p>Die genaue Gestaltung der Routine interessiert hier weniger, als ihr Ergebnis, welches in Bild 2 dargestellt ist. Im Datenblatt wurde hier zus&auml;tzlich die <b>Aggregatzeile<\/b> eingeblendet. An die Aggregatzeile kommen Sie &uuml;ber diese Schritte:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/tblBetraege.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/tblBetraege.png\" alt=\"Das ist die Datenblattansicht der Tabelle tblBetraege, unten mit der hinzugef&uuml;gten Aggregatzeile f&uuml;r die Summen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Das ist die Datenblattansicht der Tabelle tblBetraege, unten mit der hinzugef&uuml;gten Aggregatzeile f&uuml;r die Summen<\/p>\n<ul>\n<li>&ouml;ffnen Sie die Tabelle in der Datenblattansicht<\/li>\n<li>Aktivieren Sie im Ribbon die Schaltfl&auml;che <b>Start | Datens&auml;tze | Summen<\/b>. Die Aggregatzeile erscheint unten in der Ansicht.<\/li>\n<li>Gehen Sie in die Aggregatzelle einer Datenspalte und w&auml;hlen Sie aus dem nun erscheinenden Kombinationsfeld die gew&uuml;nschte <b>Aggregatfunktion<\/b> aus &#8211; hier jeweils <b>Summe<\/b>. Je nach Datentyp des Felds ist allerdings nur ein Teil der Aggregatfunktionen verf&uuml;gbar.<\/li>\n<\/ul>\n<p>Die Summen der drei Betragsspalten sind alle identisch. Das gilt auch f&uuml;r die Summen der berechneten Spalten, wobei hier <b>SummeDbl<\/b> drei Nachkommastellen zeigt, obwohl f&uuml;r die Formatierung des Felds dezidiert nur zwei Stellen im Entwurf festgelegt wurden. Aber die Formatierung der Aggregatzeile selbst l&auml;sst sich nun mal nicht beeinflussen.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000318\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000318?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000318\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Finanzsektor wird alles sehr genau genommen. Wird &uuml;ber kleinere Rundungsfehler an anderer Stelle gern einmal hinweggesehen, so sind hier Inkonsistenzen in der Regel absolut inakzeptabel. Einzelne Cent-Betr&auml;ge k&ouml;nnen sich &uuml;ber Millionen von Datens&auml;tzen zu gr&ouml;&szlig;eren Summen aufaddieren. Wohin Sie genau schauen m&uuml;ssen, um solche Umst&auml;nde zu vermeiden, untersuchen die folgenden Ausf&uuml;hrungen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662016,66052016,44000002],"tags":[],"class_list":["post-55000318","post","type-post","status-publish","format-standard","hentry","category-662016","category-66052016","category-Grundlagen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>W&auml;hrungen runden - Access [basics]<\/title>\n<meta name=\"description\" content=\"Im Finanzsektor wird alles sehr genau genommen. Wird \u00fcber kleinere Rundungsfehler an anderer Stelle gern einmal hinweggesehen, so sind hier Inkonsistenzen in der Regel absolut inakzeptabel. Einzelne Cent-Betr\u00e4ge k\u00f6nnen sich \u00fcber Millionen von Datens\u00e4tzen zu gr\u00f6\u00dferen Summen aufaddieren. Wohin Sie genau schauen m\u00fcssen, um solche Umst\u00e4nde zu vermeiden, untersuchen die folgenden Ausf\u00fchrungen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"W&auml;hrungen runden - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Im Finanzsektor wird alles sehr genau genommen. Wird \u00fcber kleinere Rundungsfehler an anderer Stelle gern einmal hinweggesehen, so sind hier Inkonsistenzen in der Regel absolut inakzeptabel. Einzelne Cent-Betr\u00e4ge k\u00f6nnen sich \u00fcber Millionen von Datens\u00e4tzen zu gr\u00f6\u00dferen Summen aufaddieren. Wohin Sie genau schauen m\u00fcssen, um solche Umst\u00e4nde zu vermeiden, untersuchen die folgenden Ausf\u00fchrungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-24T16:34:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/tblBetraege_Design.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"11\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/tblBetraege_Design.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html\",\"name\":\"W&auml;hrungen runden - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html#primaryimage\"},\"datePublished\":\"2020-06-24T16:34:57+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Im Finanzsektor wird alles sehr genau genommen. Wird \\u00fcber kleinere Rundungsfehler an anderer Stelle gern einmal hinweggesehen, so sind hier Inkonsistenzen in der Regel absolut inakzeptabel. Einzelne Cent-Betr\\u00e4ge k\\u00f6nnen sich \\u00fcber Millionen von Datens\\u00e4tzen zu gr\\u00f6\\u00dferen Summen aufaddieren. Wohin Sie genau schauen m\\u00fcssen, um solche Umst\\u00e4nde zu vermeiden, untersuchen die folgenden Ausf\\u00fchrungen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Waehrungen_runden.html\",\"name\":\"W&auml;hrungen runden\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000318"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000318\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}