AGB  ·  Datenschutz  ·  Impressum  







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

MS SQL Genauigkeit in der Termauswertung

Ein Thema von TigerLilly · begonnen am 12. Jun 2019 · letzter Beitrag vom 13. Jun 2019
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 12. Jun 2019, 14:09
Hallo,
Firebird macht es richtig ...
Es kommt in beiden Fällen 0.006 raus.

Vielleicht musst du noch ein Cast auf Double Precision machen:
select cast((0.1*(12/100*0.5) as double precision)
Heiko

Geändert von hoika (12. Jun 2019 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#2

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 12. Jun 2019, 14:16
Missverständnis. Erstes und zweites beispiel liefern natürlich unterschiedliche Ergebnisse. Sind ja auch mathematisch was anderes.

Das: select 12/100*0.5 liefert 0, während select 0.5*12/100 das erwartete Ergebnis liefert.

Meine Vermutung war, 12 als Integer die Genauigkeit vorgibt, sprich: keine Kommastellen.
Darum mein Versuch mit select 0.1*12/100*0.5 Kommastellen zu erzwingen, aber nada.

Die Doku sagt, dass Terme - also das 12/100 mit der Genauigkeit ihrer Operanden ausgewertet werden. Also ergibt 12/100 0.

Und nein: Der SQL Server kann schon richtig rechnen: Punkt vor Strich etc.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 12. Jun 2019, 14:24
Die Doku sagt, dass Terme - also das 12/100 mit der Genauigkeit ihrer Operanden ausgewertet werden. Also ergibt 12/100 0.
Müsste dann nicht auch 0.5/100 auch 0 ergeben!? Und da in einer (reinen) Multiplikation einmal eine "0" vor kommt (bei beiden Rechenbeispielen!) wäre das Ergebnis BEIDER Beispiele 0, also sogar gleich. Aber du sagst das Ergebnis sei unterschiedlich, also kann diese Begründung nicht passen.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#4

AW: MS SQL Genauigkeit in der Termauswertung

  Alt 12. Jun 2019, 14:21
Hallo,
Firebird macht es richtig ...
Es kommt in beiden Fällen 0.006 raus.

Vielleicht musst du noch ein Cast auf Double Precision machen:
select cast((0.1*(12/100*0.5) as double precision)
Das hätte mein versuch mit dem 0.1* erzwingen sollen. Aber auch das CASTen hätte nichts genutzt, da 12/100 eben 0 ergibt.

Ich bin mir jetzt auch keiner Server-Einstellung bewusst, die das beeinflussen könnte.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz