Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rundungsproblem mit MySQL (https://www.delphipraxis.net/68224-rundungsproblem-mit-mysql.html)

Angel4585 26. Apr 2006 15:07

Datenbank: MySQL • Version: 5 • Zugriff über: ZEOS

Rundungsproblem mit MySQL
 
Hallo zusammen,

ich habe ein kleines Rundungsproblem was vermutlich an MySQL liegt.

Ich habe ein FloatFeld in welches ich z.B. den Wert "1,95583" eingebe. Dann mache ich ein einfaches Post, wodurch die Daten ja eigentlich gespeichert werden sollten. Allerdings steht dann aufeinmal "1,9558299779892" in dem Feld drin :wall:

Weis jemand was ich da falsch mache?

MfG :angel:

mkinzler 26. Apr 2006 16:38

Re: Rundungsproblem mit MySQL
 
Wie fügst du das ein ( Code).

Jelly 26. Apr 2006 18:11

Re: Rundungsproblem mit MySQL
 
Nimm doch mal ein anderes Datenfeld, z.B. numeric oder currency.

Angel4585 26. Apr 2006 21:31

Re: Rundungsproblem mit MySQL
 
@mkinzler:

SQL-Code:
 Create Table if not exists Tabellenname (Feldname FLOAT);
@Jelly: ich werd da morgen gleich ausprobieren aber jetz iss zu*gäähhnnn* .zZ(Hier gibbet ja gerkein Smiley der pennt :gruebel: )

mkinzler 26. Apr 2006 21:33

Re: Rundungsproblem mit MySQL
 
Ich meinte eigentlich den INSERT.

Angel4585 27. Apr 2006 07:09

Re: Rundungsproblem mit MySQL
 
Naja ich mach das mit den ZEOS Queries. Einfach Append, dann in ein Editfeld schreiben und dann en Post.

mkinzler 27. Apr 2006 07:10

Re: Rundungsproblem mit MySQL
 
Zeig mal den Code dafür.

Angel4585 27. Apr 2006 07:28

Re: Rundungsproblem mit MySQL
 
Hä? :gruebel: Bitte:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender : TObject);
begin
Query.Append;
end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender : TObject);
begin
if Query.State <> dsBrowse then
  Ouery.Post;
end;
und dnn gibts halt noch des DBEdit in das ich zwicshen den Klicks die Zahl eintrage. Der Fehler taucht übrigens auch bei anderen Kommazahlen auf.. fängt bei 0,1 an und kommt eigentlich bei jeder Kommazahl ausser *,0 vor.

Sharky 27. Apr 2006 08:04

Re: Rundungsproblem mit MySQL
 
Hai Angel,

hier mal ein Auszug aus der mySQL 5.x Doku:
Zitat:

Using FLOAT might give you some unexpected problems because all calculations in MySQL are
done with double precision. See Section A.5.7, “Solving Problems with No Matching Rows”.
In der deutschen Doku zu mySQL 4.x steht:
Zitat:

Der FLOAT-Typ wird benutzt, um näherungsweise numerische Datentypen zu repräsentieren.
Wenn Du es genau speichern möchtest verwende den Typ DEZIMAL unter angabe der Genauikgeit
Code:
DEZIMAL(10,5)
Eine Dezimalzahl mit 10 Stellen, der übergebene Wert wird auf 5 Stellen nach dem Komma gerundet.

Zitat:

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
A packed “exact” fixed-point number. M is the total number of decimal digits (the precision) and
D is the number of digits after the decimal point (the scale). The decimal point and (for negative
numbers) the ‘-’ sign are not counted in M. If D is 0, values have no decimal point or fractional
part. The maximum number of digits (M) for DECIMAL is 65. The maximum number of supported
decimals (D) is 30. If D is omitted, the default is 0. If M is omitted, the default is 10.
UNSIGNED, if specified, disallows negative values.
All basic calculations (+, -, *, /) with DECIMAL columns are done with a precision of 65
digits.

Angel4585 27. Apr 2006 08:44

Re: Rundungsproblem mit MySQL
 
Hab jetz den Typ DECIMAL(10,5) genommen, aber es wird mir imernoch ein etwas seltsamer Wert angezeigt. Komischerweise in einem Grid mit einem FloatField:

Delphi-Quellcode:
  with Columns.Add do
    begin
    FieldName:=cfEinzelPreis;
    Width:=100;
    TFloatField(Field).DisplayFormat:=',.00';
    end;
und drin steht

1234,09997558594 anstatt 1234,1 :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 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