Frage stellen
0

Kommastellen in Abfragen, Rundungen abstellen

gefragt 2019-05-23 10:15:35 +0200

Bus Gravatar-Bild

Moin, ich mache in einer Abfrage folgende Rechnung 540,000000 / 365 / 6 =

Base zeigt dann 0,25 (HSQL)

Mit einen Taschenrechner aber 0,2465753

Ich suche also einen Weg die Nachkommastellen in einer Abfrage zu beeinflussen bzw. die Rundung abzustellen.

Danke für die Hilfe Gruß Bus

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

Also bei mir ist der Wert nicht gerundet berechnet sondern wird nur gerundet in der Ergebnistabelle der SQL Abfrage angezeigt - ändert man das Format der Ergebnistabelle entsprechend, erscheint auch der "Taschenrechnerwert".

Opaque Gravatar-BildOpaque ( 2019-05-23 12:22:40 +0200 )Bearbeiten

Danke für die Info. Aber mir ist die Antwort von den Begrifflichkeiten nicht klar. Was ist eine Ergebnistabelle?

Bus Gravatar-BildBus ( 2019-05-23 12:46:24 +0200 )Bearbeiten

Wenn ich eine SQL Abfrage ausführe, dann wird das Ergebnis in einer Tabelle angezeigt (Ich arbeite für solche Fragen mit ganz einfachen Tabellen und manuell erstellten SQL Abfragen). Zu dieser Deiner Frage habe ich einfach eine Tabelle "Rechner" mit 3 Spalten (Num1, Num2, Num3) erstellt, die Tabelle mit den 3 Werten (500, 365, 6) gefüllt und anschließend eine SQL Abfrage Select Num1,Num2,Num3, Num1 / Num 2 / Num2 AS Quotient FROM "Rechner". Das liefert dann die "Ergebnistabelle". Und die hat 4 Spalten, wovon die 4. Spalte in diesem Fall mit "Quotient" überschrieben ist. Und ein Rechtsklick auf diese Spalte erlaubt das Format ("Spaltenformatierung") zu ändern. Das zeigt dann, dass die Berechnung nicht gerundet durchgeführt ist, sondern lediglich das Ergebnis mit 2 Nachkommastellen angezeigt wird (Wie so oft unterscheiden sich Daten und Repräsentation derselben).

Opaque Gravatar-BildOpaque ( 2019-05-23 13:05:43 +0200 )Bearbeiten

ok, ich habe die Spaltenformatierung geändert aber man kann sie ja nicht abspeichern oder?

Aber wenn ich danach diesen Wert nehme und für eine andere Rechnung benutze, wird immer der gerundete Wert genommen 0,25 und nicht der nicht gerundete 0,2465753 Mein Ziel ist wie folgt. Ich nehme die Kosten also 540,00E und teile sie durch einen Schlüssel, hier einmal die Jahrestageszahl 365 und dann noch durch 6 . In einer zweiten Abfrage nehme ich dann diesen Grundwert (nicht gerundet 0,2465753) und multipliziere ihn mit einen anderen Schlüssel.

Wenn ich dann die Summe aus den Einzelergebnissen bilde muss dann wieder 540,00€ raus kommen. Und das macht das System nicht sondern rechnet immer mit den gerundeten Wert 0,25

Bus Gravatar-BildBus ( 2019-05-23 15:03:27 +0200 )Bearbeiten

Bitte stelle ein Beispiel zur Verfügung, das diesen 2. Fehler zeigt: Statt des echten Wertes wird ein gerundeter Wert zur weiteren Berechnung genutzt.

Wenn das geschehen ist, dann lässt sich das als Bug melden. Die Formatierung der Spalte mit Nachkommastellen ist dagegen nur Kosmetik. Da die Formatierung der Abfragen nicht gespeichert werden kannst Du so etwas durch Ansichten oder durch Formulare lösen, die dann das Anzeigen, was Du korrekt erreichen willst.

RobertG Gravatar-BildRobertG ( 2019-05-23 16:17:26 +0200 )Bearbeiten

2 Antworten

1

geantwortet 2019-05-23 21:12:38 +0200

RobertG Gravatar-Bild

Wird in einer Abfrage durch eine Zahl geteilt, so kommen meist Dezimalzahlen mit Nachkommastellen als Ergebnis vor. Werden als Ausgangszahlen aber ganze Zahlen benutzt, so liefert das Ergebnis auch nur ganze Zahlen. Das hängt mit dem Zahlentyp zusammen, der dann angenommen wird: INTEGER / INTEGER ergibt wieder INTEGER. 1 / 2 = 0. Das kann natürlich schnell für Verwirrung und natürlich falschen Zahlenwerten führen.

Teile ich hingegen 1 / 2.0, so erhalte ich korrekt 0,5. Ich mache aus einer der beteiligten Zahlen eine Dezimalzahl mit einer Nachkommastelle. Das Ergebnis wird so zu einer Zahl mit einer Nachkommastelle.

Teile ich (1+1)/4, so erhalte ich wieder 0 - alle beteiligten Zahlen sind Ganzzahlen. (1+1.0)/4 ergibt hingegen korrekt die eine Nachkommastelle zurück, die ich brauche.

Du teilst in Deinem Beispiel 540.00/365/6. Da sind nur maximal 2 Nachkommastellen enthalten. Anscheinend liest in diesem Fall die HSQLDB auch die dritte Nachkommastelle aus und rundet danach. Ansonsten wäre das aus den Zahlen ermittelte Ergebnis 2,4. Wenn Du das Ganze korrekter brauchst als die gerundeten 2,5, dann musst Du bei einer der in der Rechnung befindlichen Zahlen die Nachkommastellen hochsetzen. Damit stellst Du die Nachkommastellen dann immer näher am korrekten Ergebnis ein. Genau dieses Verfahren machst Du mit der Addition von 1.000000 für die Anzahl der Tage. Dadurch ist die Tagesangabe jetzt 365.000000. Und damit erhalte ich dann aus 540.00/365.000000/6=0.246575 - also eine Zahl mit 6 Nachkommastellen, die durch die Benutzeroberfläche der Abfrage aber leider weiter als 0,25 dargestellt wird.

Gruß

Robert

Bearbeiten Melden löschen Link mehr

Kommentare

Moin Robert, Danke für die Erklärung, mit diesem wissen kann ich jetzt weiter arbeiten. Gruß Bus

Bus Gravatar-BildBus ( 2019-05-24 08:04:32 +0200 )Bearbeiten
0

geantwortet 2019-05-23 17:40:05 +0200

Bus Gravatar-Bild

updated 2019-05-23 18:28:15 +0200

C:\fakepath\Test.odb

Anbei die zusammen gestrichene DB.

Ich habe einmal die DB unter gleichen Namen abgespeichert und danach die .._3 Abfrage erstellt, da war das Ergebnis richtig. Bein erneuten Aufrufen der Abfrage aber wieder nicht.

Bearbeiten Melden löschen Link mehr

Kommentare

nachdem ich noch einmal nachgedacht habe, fiel mir ein, dass ich bevor ich die DB noch einmal unter gleichen Namen abgespeichert hatte, auch die Abfrage..._1 geändert habe.

Dort habe ich folgende Formel gehabt DATEDIFF( 'day', CAST( YEAR( "Rg-Datum" ) || '-01-01' AS DATE ), CAST( YEAR( "Rg-Datum" ) || '-12-31' AS DATE ) ) + 1.000000

Wenn ich die Formel anwende, dann bekomme ich wieder den Wert in der dritten Abfrage von 540

Wenn ich die Formel wie folgt anwende

DATEDIFF( 'day', CAST( YEAR( "Rg-Datum" ) || '-01-01' AS DATE ), CAST( YEAR( "Rg-Datum" ) || '-12-31' AS DATE ) ) + 1

Dann stimmt das Ergebnis in der Abfrage 3 nicht mehr.

Jetzt möchte ich natürlich wissen, warum ist das so?

Vielleicht kann Robert als Experte mir da helfen Dank

Bus Gravatar-BildBus ( 2019-05-23 18:27:36 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2019-05-23 10:15:35 +0200

Angesehen: 43 Mal

Aktualisiert: May 23