AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MS SQL Genauigkeit in der Termauswertung

MS SQL Genauigkeit in der Termauswertung

Ein Thema von TigerLilly · begonnen am 12. Jun 2019 · letzter Beitrag vom 13. Jun 2019
Antwort Antwort
Seite 3 von 4     123 4   
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:29
0.1 * (0.5 / 100 * 12) = 0.00
0.1 * (0.50 / 100 * 12) = 0.006 (?)
Also, das ist jetzt ein bissl off-topic, aber zurück zu dem, was der MS-SQL wirklich ausgibt:

0.1 * (0.5 / 100 * 12) = 0.006
0.1 * (12 / 100 * 0.5) = 0.0

(0.5 / 100 * 12) = 0.06
(12 / 100 * 0.5) = 0.0
(12.0 / 100 * 0.5) = 0.06
(12 / 100.0 * 0.5) = 0.06

Wie gesagt: die Genauigkeit einer Operation wird durch die Genauigkeit ihrer Operanden definiert. Daher ergibt 12/100 IMMER(!) 0, egal wo im Term es steht.

Jetzt weiß ich es.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#22

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:35
Wie gesagt: die Genauigkeit einer Operation wird durch die Genauigkeit ihrer Operanden definiert. Daher ergibt 12/100 IMMER(!) 0, egal wo im Term es steht.

Jetzt weiß ich es.
Nein, du liegst leider falsch, denn select 0.5*12/100 ergibt 0.06.
SQLfiddle

Aber jetzt solltest du wissen sehen, warum
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#23

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:38
0.1 * (0.5 / 100 * 12) = 0.00
0.1 * (0.50 / 100 * 12) = 0.006 (?)
Also, das ist jetzt ein bissl off-topic, aber zurück zu dem, was der MS-SQL wirklich ausgibt:

0.1 * (0.5 / 100 * 12) = 0.006
0.1 * (12 / 100 * 0.5) = 0.0

(0.5 / 100 * 12) = 0.06
(12 / 100 * 0.5) = 0.0
(12.0 / 100 * 0.5) = 0.06
(12 / 100.0 * 0.5) = 0.06

Wie gesagt: die Genauigkeit einer Operation wird durch die Genauigkeit ihrer Operanden definiert. Daher ergibt 12/100 IMMER(!) 0, egal wo im Term es steht.

Jetzt weiß ich es.
Falsch, denn sobald du mit 0 Multiplizierst ist das Ergebnis IMMER 0, aber du beweist ja auch:
(12.0 / 100 * 0.5) = 0.06 //Wäre 12.0 / 100 = 0, wäre das Ergebnis auch 0!
(12 / 100.0 * 0.5) = 0.06 //Wäre 12 / 100.0 = 0, wäre das Ergebnis auch 0!
Somit musst du die erforderliche Anzahl der Kommastellen in der Rechnung angeben, damit nicht abgeschnitten wird!
Ergo fehlt bei der Rechnung (12 / 100 * 0.5) = 0.0 nur eine Kommastelle und hätte drei mögliche Varianten um das richtige Ergebnis zu erhalten:
  • (12.0 / 100 * 0.5) müsste = 0.06
  • (12 / 100.0 * 0.5) müsste = 0.06
  • (12 / 100 * 0.50) müsste = 0.06

Edit wegen Schokohases Post: Wenn die Reihenfolge scheinbar bei MS SQL einen Unterschied in der Rechnung bzw. im Ergebnis macht, sollte man sich ggf. nochmal mit der Rechnungslogik in MS SQL befassen, denn hier scheint es doch noch mehr Besonderheiten zu geben worauf zu achten ist. (Danke für den Link )
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (13. Jun 2019 um 07:42 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:39
@schokohase: Ja, stimmt, ich hab´s ungenau formuliert, es kommt ja auf die Reihenfolge der Auswertung an. In deinem Beispiel wird 12/100 ja gar nicht ausgewertet.

Geändert von TigerLilly (13. Jun 2019 um 07:41 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:40
  • (12.0 / 100 * 0.5) = 0.06
  • (12 / 100.0 * 0.5) = 0.06
  • (12 / 100 * 0.50) = 0.06
Das 3te ist falsch, da kommt auch 0 raus, weil 12/100 sich zu 0 berechnet.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#26

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:44
Ja, stimmt, ich hab´s ungenau formuliert, es kommt ja auf die Reihenfolge der Auswertung an. In deinem Beispiel wird 12/100 ja gar nicht ausgewertet.
Wieso wird in meinem Beispiel 12/100 nicht ausgewertet?

Du meinst sicherlich, in meinem Beispiel kommt es bei der Berechnung (die von links nach rechts erfolgt) nicht zu der Integer-Division von 12 und 100.

Es wird also erst 0.5 * 12 errechnet (= 6.0)
und dann 6.0/100 (= 0.06)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#27

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:46
Entfernt, da falsch.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (13. Jun 2019 um 08:26 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 07:51
Code:
select (12/100)*0.5 = 0.06 //Dank Schokohase konnte ich es testen.
Nein, das ergibt auch 0. Also zumindest beim MSSQL.

Zitat:
Also wie ich bereits am Anfang sagte erkennt MS SQL den Bruch nicht und du musst ihn einklammern!
Nein, das hat mit bruch erkennen nichts zu tun, sondern mit der Genauigkeit der Berechnung. Zwei ganzzahlige Operatoren haben ein ganzzahliges Ergebnis. Der bruch wird schon richtig gerechnet, aber nicht mit der erwarteten Genauigkeit.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#29

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 08:01
Code:
select (12/100)*0.5 = 0.06 //Dank Schokohase konnte ich es testen.
Ja, können wir auch SQLfiddle und sehen 0
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#30

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 13. Jun 2019, 08:07
Bekloppt, habe die Seite neu geladen und das nun nochmal eingegeben und erhalte nun AUCH 0.... dann habe ich dahingehend nichts gesagt -.- (Anwender Fehler, habe den Code von links nicht nach rechts NEU kopiert^^)

Dennoch scheint man mehr als die "normalen" Rechenregeln in MS SQL bedenken zu müssen.

  • (12.0 / 100 * 0.5) = 0.06
  • (12 / 100.0 * 0.5) = 0.06
  • (12 / 100 * 0.50) = 0.06
Das 3te ist falsch, da kommt auch 0 raus, weil 12/100 sich zu 0 berechnet.
Also muss im Bruch auch mindestens eine Zahl eine Kommazahl sein, damit er mit Kommastellen rechnet (!?) und du somit das richtige Ergebnis bekommst. Wobei dann wirklich egal ist wie viele Kommastellen man in der Rechnung angibt:

select 12 / 100 = 0;
select 12 / 100.0 = 0.12;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (13. Jun 2019 um 08:25 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz