MySQL における 10 進数型の使用法の簡単な紹介

MySQL における 10 進数型の使用法の簡単な紹介

MySQL でサポートされている浮動小数点型は、 FLOATDOUBLE 、およびDECIMALです。 DECIMAL 型は、 FLOAT や DOUBLE とは異なります。 DECIMAL は実際には文字列として保存されます。 DECIMAL 値の最大可能範囲は DOUBLE と同じですが、その有効範囲は M と D の値によって決まります。 M が変更され、D が固定されている場合、M が増加するにつれてその値の範囲は増加します。

お金など、精度の高いものには、10 進数型を使用することをお勧めします。float や double はエラーが発生しやすいため、使用しないでください。numeric と 10 進数は同義であり、numeric は自動的に 10 進数に変換されます。

DECIMAL は MySQL 5.1 で導入されました。列宣言構文は DECIMAL(M,D) です。 MySQL 5.1 では、パラメータ値の範囲は次のとおりです。

  • M は数値の最大数 (精度) です。範囲は 1 ~ 65 (古いバージョンの MySQL では、許容範囲は 1 ~ 254) で、M のデフォルト値は 10 です。
  • D は小数点の右側の桁数 (スケール) です。範囲は 0 ~ 30 ですが、M を超えてはなりません。

注: float は 4 バイト、double は 8 バイト、decimail (M、D) は M+2 バイトを占有します。

たとえば、DECIMAL(5,2) の最大値は 7 バイト使用できるため 9999.99 です。

したがって、M と D は DECIMAL(M, D) の値の範囲に影響を与える重要な要素です。

タイプ 説明 値の範囲 (MySQL < 3.23) 値の範囲 (MySQL >= 3.23)
DECIMAL(4,1) -9.9 ~ 99.9 -999.9 ~ 9999.9
DECIMAL(5,1) -99.9 ~ 999.9 -9999.9 ~ 99999.9
DECIMAL(6,1) -999.9 ~ 9999.9 -99999.9 ~ 999999.9
10進数(6,2) -99.99 ~ 999.99 -9999.99 ~ 99999.99
DECIMAL(6,3) -9.999 ~ 99.999 -999.999 ~ 9999.999

特定の DECIMAL 型の値の範囲は、MySQL データ型のバージョンによって異なります。 MySQL 3.23 より前のバージョンでは、DECIMAL(M, D) 列の各値は M バイトを占め、符号 (必要な場合) と小数点が M バイトに含まれます。したがって、DECIMAL(5, 2) 型の列は、すべての可能な 5 文字の値をカバーするため、-9.99 から 99.99 までの範囲の値を持つことができます。

# MySQL 3.23 以降では、DECIMAL(M, D) の値の範囲は、以前のバージョンの DECIMAL(M + 2, D) の値の範囲と同じです。

結論は:

  • 値が範囲内にあり、小数点以下の桁数が多すぎる場合、小数点以下の桁はそのまま切り捨てられます。
  • 値が範囲外の場合は、最大値 (最小値) で埋められます。

JAVA+MySQL+JPA 実践

msyql-Decimalはjava-BigDecimalに対応します

データテーブルの定義

@実在物
パブリッククラスTestEntityはModelを拡張します{
  @Column(nullable = true、列定義 = "decimal(11,2)")
  公開 BigDecimal 価格;
}

テスト結果と説明

 /**
     * 1.mysql-Decimal(9+2,2)はjava-BigDecimalに対応する
     * 2. 整数部は 9 桁、小数部は 2 桁で、小数点は切り捨てられます。 * 3. 割り切れる部分が 9 桁の制限を超えると、エラーが報告されます。
     * 4. 小数点以下の桁数が桁数を超える場合は、小数点以下2桁に切り捨てられます*/
    TestEntity エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(123456789.12d));
    エンティティを保存します。
    // 整数が 9 桁を超えています。
エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(1234567891.123d));
    エンティティを保存します。
    */
    エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(123456789.123d));
    エンティティを保存します。
    エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(123456789.126d));
    エンティティを保存します。
    エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(123456789d));
    エンティティを保存します。
    エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(123456.2355));
    エンティティを保存します。
    エンティティ = 新しい TestEntity();
    entity.price = 新しい BigDecimal(Double.toString(123456.2356));
    エンティティを保存します。
    エンティティ = TestEntity.find("price = ?", 新しい BigDecimal(Double.toString(123456789.12d))).first();
    System.out.println("クエリ結果:" + entity.id + ", " + entity.price);

結果を挿入

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

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL における Decimal 型と Float Double 型の違い (詳細説明)
  • MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明
  • 科学的記数法の数値文字列を 10 進数型に変換する方法
  • データベースのデータ型 float から C# の型 10 進数への変換、float データ型の変換は無効です
  • MySQL データ型における DECIMAL の使用法の詳細な説明
  • mysql 10進データ型変換の実装
  • MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明
  • MySQL データ型 DECIMAL の使用方法の詳細な説明
  • データベースにおける Decimal 型の使用と実装の詳細な説明

<<:  Linux で起動時にプログラムを自動的に実行させる最も簡単な方法

>>:  JavaScript オブジェクトの組み込みオブジェクト、値型、参照型の説明

推薦する

Baidu サイト検索が https をサポートしていない問題の解決策 (テスト済み)

最近、携帯電話で https が有効になりました。緑色のロックを取得するには、次の問題を解決する必要...

JS でシングルトン モードを実装するための 6 つのソリューションの概要

序文今日は、デザインパターンのクリエーションパターンを見直していたところ、JS でシングルトンパター...

Docker-compose ネットワークの詳細な例

今日は Docker でのネットワーク設定を試し、後で忘れないようにプロセスを記録しました。 (シス...

よく使用される入力テキストボックスの内容は自動的に垂直方向に中央揃えされ、クリックするとデフォルトのプロンプトテキストは空になります。

3つの機能: 1. コンテンツの垂直方向の自動中央揃え2. デフォルトのプロンプトテキストは灰色で表...

sysbenchツールによるMySQLデータベースのパフォーマンステストの実装方法

1. 背景Sysbench は、システムのハードウェア パフォーマンスをテストできるストレス テスト...

MySQL の異常なエラー ERROR: 2002 を解決する方法

最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...

CSS 水平方向の中央揃えと最大幅の制限

CSS レイアウトとスタイルに関する質問: 水平方向の中央揃えと最大幅の制限のバランスをとる方法最近...

MySQLデータクエリが多すぎるとOOMが発生するかどうかについての簡単な議論

目次サーバー層でのフルテーブルスキャンの影響InnoDB におけるフルテーブルスキャンの影響Inno...

MySQL 5.7.17 圧縮バージョンのインストールノート

この記事では、参考までにMySQL 5.7.17圧縮版のインストール手順を紹介します。具体的な内容は...

MySQL で戻り値ありと戻り値なしのストアド プロシージャを書く 2 つの方法

プロセス1: 戻り値あり: proc_addNum が存在する場合はプロシージャを削除します。 プロ...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

優れた登録プロセスの手順

ウェブサイトにとって、これは最も基本的な機能です。それでは、登録プロセスに含まれる手順を見てみましょ...

XHTML 入門チュートリアル: XHTML とは何ですか?

HTMLとは何ですか?簡単に言えば、HTML は Web ページを作成するために使用されます。とて...

CSS の Display、Visibility、Opacity、rgba、z-index: -1 の違い

ウェブページ上のいくつかの要素の非表示、透明、その他のプロパティを制御する必要があることがよくありま...

MySQL 5.7.18 リリース インストール ガイド (bin ファイル バージョンを含む)

インストール プロセスは、コンパイル手順を除いて、基本的にソース バージョンと同じです。この記事では...