Eine kurze Einführung in die Verwendung des Dezimaltyps in MySQL

Eine kurze Einführung in die Verwendung des Dezimaltyps in MySQL

Die in MySQL unterstützten Gleitkommatypen sind FLOAT , DOUBLE und DECIMAL . Der Typ DECIMAL unterscheidet sich von FLOAT und DOUBLE. DECIMAL wird tatsächlich als Zeichenfolge gespeichert. Der maximal mögliche Bereich von DECIMAL-Werten ist der gleiche wie der von DOUBLE, aber sein effektiver Bereich wird durch die Werte von M und D bestimmt. Wenn M geändert und D fixiert wird, erhöht sich sein Wertebereich mit zunehmender M.

Für Dinge mit höherer Genauigkeit, wie z. B. Geld, wird empfohlen, den Dezimaltyp zu verwenden. Erwägen Sie nicht die Verwendung von Float oder Double, da diese fehleranfällig sind. Numerisch und Dezimal sind synonym und numerisch wird automatisch in Dezimal umgewandelt.

DECIMAL wurde in MySQL 5.1 eingeführt. Die Spaltendeklarationssyntax ist DECIMAL(M,D). In MySQL 5.1 ist der Parameterwertebereich wie folgt:

  • M ist die maximale Anzahl von Zahlen (Präzision). Der Bereich reicht von 1 bis 65 (in älteren MySQL-Versionen ist der zulässige Bereich 1 bis 254) und der Standardwert von M ist 10.
  • D ist die Anzahl der Ziffern rechts vom Dezimalpunkt (Skala). Der Bereich liegt zwischen 0 und 30, darf jedoch M nicht überschreiten.

Hinweis: Float belegt 4 Bytes, Double belegt 8 Bytes und Decimail (M, D) belegt M+2 Bytes.

Beispielsweise beträgt der Maximalwert von DECIMAL(5,2) 9999,99, da 7 Bytes zur Verfügung stehen.

Daher sind M und D die Schlüsselfaktoren, die den Wertebereich von DECIMAL(M, D) beeinflussen.

Typ Beschreibung Wertebereich (MySQL < 3.23) Wertebereich (MySQL >= 3.23)
DECIMAL(4,1) -9,9 bis 99,9 -999,9 bis 9999,9
DECIMAL(5,1) -99,9 bis 999,9 -9999,9 bis 99999,9
DECIMAL(6,1) -999,9 bis 9999,9 -99999,9 bis 999999,9
DECIMAL(6,2) -99,99 bis 999,99 -9999,99 bis 99999,99
DECIMAL(6,3) -9,999 bis 99,999 -999,999 bis 9999,999

Der Wertebereich für einen bestimmten DECIMAL-Typ hängt von der Version des MySQL-Datentyps ab. Bei Versionen vor MySQL 3.23 belegt jeder Wert einer DECIMAL(M, D)-Spalte M Bytes, und das Vorzeichen (falls erforderlich) und der Dezimalpunkt sind in den M Bytes enthalten. Somit kann eine Spalte vom Typ DECIMAL(5, 2) Werte im Bereich von -9,99 bis 99,99 aufweisen, da sie alle möglichen 5-stelligen Werte abdecken.

# In MySQL 3.23 und höher ist der Wertebereich von DECIMAL(M, D) gleich dem Wertebereich von DECIMAL(M + 2, D) in früheren Versionen.

abschließend:

  • Liegt der Wert innerhalb des Bereichs und hat zu viele Nachkommastellen, werden die Nachkommastellen direkt abgeschnitten.
  • Wenn der Wert außerhalb des Bereichs liegt, wird er mit dem Maximalwert (Minimalwert) aufgefüllt.

JAVA+MySQL+JPA Praxis

msyql-Decimal entspricht java-BigDecimal

Datentabellendefinition

@Juristische Person
öffentliche Klasse TestEntity erweitert Model {
  @Column(nullable = true, Spaltendefinition = "Dezimalzahl(11,2)")
  öffentlicher BigDecimal-Preis;
}

Testergebnisse und Erklärung

 /**
     * 1.mysql-Decimal(9+2,2) entspricht java-BigDecimal
     * 2. Der ganzzahlige Teil besteht aus 9 Ziffern, der Dezimalteil aus 2 Ziffern und die Dezimalzahl wird gerundet. * 3. Wenn der teilbare Teil die Grenze von 9 Ziffern überschreitet, wird ein Fehler gemeldet.
     * 4. Wenn der Dezimalteil die Anzahl der Ziffern überschreitet, wird er gerundet und auf 2 Dezimalstellen gekürzt*/
    TestEntity-Entität = neue TestEntity();
    entity.price = neuer BigDecimal(Double.toString(123456789.12d));
    entity.speichern();
    // Die ganze Zahl hat mehr als 9 Ziffern.
Entität = neue TestEntity();
    entity.price = neues BigDecimal(Double.toString(1234567891.123d));
    entity.speichern();
    */
    Entität = neue TestEntity();
    entity.price = neuer BigDecimal(Double.toString(123456789.123d));
    entity.speichern();
    Entität = neue TestEntity();
    entity.price = neues BigDecimal(Double.toString(123456789.126d));
    entity.speichern();
    Entität = neue TestEntity();
    entity.price = neues BigDecimal(Double.toString(123456789d));
    entity.speichern();
    Entität = neue TestEntity();
    entity.price = neuer BigDecimal(Double.toString(123456.2355));
    entity.speichern();
    Entität = neue TestEntity();
    entity.price = neuer BigDecimal(Double.toString(123456.2356));
    entity.speichern();
    Entität = TestEntity.find("Preis = ?", neues BigDecimal(Double.toString(123456789.12d))).first();
    System.out.println("Abfrageergebnisse:" + entity.id + ", " + entity.price);

Ergebnisse einfügen

1 123456789.12
2 123456789.12
3 123456789.13
4 123456789.00
5 123456.24
6 123456.24

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Der Unterschied zwischen dem Dezimaltyp und dem Float Double in MySQL (ausführliche Erklärung)
  • Detaillierte Erklärung der Bedeutung von N und M im MySQL-Datentyp DECIMAL(N,M)
  • Methode zum Konvertieren einer numerischen Zeichenfolge in wissenschaftlicher Notation in den Dezimaltyp
  • Datenbankdatentyp Float zum C#-Typ Dezimal, Konvertierung des Float-Datentyps ist ungültig
  • Detaillierte Erklärung der Verwendung von DECIMAL im MySQL-Datentyp
  • Implementierung der MySQL-Dezimaldatentypkonvertierung
  • Detaillierte Erläuterung des Dezimal-Padding-Problems des Dezimal-Datentyps in MySQL
  • Detaillierte Erklärung zur Verwendung des MySQL-Datentyps DECIMAL
  • Ausführliche Erläuterung der Verwendung und Implementierung des Decimal-Typs in der Datenbank

<<:  Der einfachste Weg, ein Programm beim Start in Linux automatisch auszuführen

>>:  Integrierte Objekte, Werttypen und Referenztypen in JavaScript-Objekten erklärt

Artikel empfehlen

Erläuterung der Faktoren, die die Datenbankleistung in MySQL beeinflussen

Eine Geschichte über die Datenbankleistung Währen...

TypeScript-Aufzählungstypen im Detail erklären

Inhaltsverzeichnis 1. Digitale Aufzählung 2. Zeic...

Linux-Grundlagen-Tutorial: Sonderberechtigungen SUID, SGID und SBIT

Vorwort Für Datei- oder Verzeichnisberechtigungen...

HTML-Tutorial, leicht zu erlernende HTML-Sprache

1. <body background=Bilddateiname bgcolor=Farb...

Vollständiger Code zur Implementierung der Vue-Backtop-Komponente

Wirkung: Code: <Vorlage> <div Klasse=&qu...

Beispiel für die Konfiguration der domänenübergreifenden Fehlerbehebung in nginx

Die domänenübergreifende Nginx-Konfiguration wird...

Wie überwacht und erhält Zabbix Netzwerkgerätedaten über SSH?

Szenariosimulation: Das Betriebs- und Wartungsper...

CSS Paint API: Ein CSS-ähnliches Zeichenbrett

1. Canvas-Bilder als CSS-Hintergrundbilder verwen...

Zusammenfassung der 10 wichtigsten JavaScript-Interviewfragen (empfohlen)

1.Dies deutet auf 1. Wer ruft wen an? Beispiel: F...

Ein Artikel zeigt Ihnen, wie Sie mit React ein Rezeptsystem implementieren

Inhaltsverzeichnis 1. Rezeptsammlung 1.1 Projekth...

So implementieren Sie https mit Nginx und OpenSSL

Wenn die Serverdaten nicht verschlüsselt und mit ...

Detaillierte Erklärung der Verwendung des Linux-Befehls „tee“

Der Befehl tee wird hauptsächlich verwendet, um d...