1. ホーム
  2. database

Doctrine 2 で 10 進数のフィールドタイプを指定するときの scale と precision の意味は?

2023-10-28 19:37:46

質問

Symfony2アプリケーションのために、Doctrine2で財務数値を保持するための10進数フィールドを作成しています。

現在はこのような感じです。

/**
 * @ORM\Column(type="decimal")
 */
protected $rate;

値を入力し、その値がデータベースに永続化されたとき、その値は整数に丸められました。私は、フィールドの精度とスケールのタイプを設定する必要があると推測していますが、それらが何をするのか正確に説明してくれる人が必要です。

その Doctrine2 ドキュメント にはこう書かれています。

精度。10進数(正確な数値)カラムの精度(10進数カラムにのみ適用されます。)

スケール。10進数(正確な数値)カラムのスケール(10進数カラムにのみ適用されます。)

でも、これだけではよくわからないですよね。

precisionは四捨五入する小数点以下の桁数だと思うので、2でいいと思うのですが、scaleは何でしょうか?スケールとは有効数字でしょうか?

フィールド宣言はこうすればいいのでしょうか:-)

/**
 * @ORM\Column(type="decimal", precision=2, scale=4)
 */
protected $rate;

どのように解決するのですか?

Doctrine は SQL の型と似たような型を使用します。10進数はたまたま固定精度の型です (フロートと異なります)。

から引用した MySQL ドキュメント :

<ブロッククオート

DECIMAL列の宣言では、精度とスケールを指定することができます(通常はそうします)。

給料 DECIMAL(5,2)

この例では、5が精度、2が目盛りになります。精度は値に対して格納される有効桁数を表し、スケールは小数点の後に格納できる桁数を表します。

標準SQLでは、DECIMAL(5,2)が5桁と小数点以下2桁の任意の値を格納できることを要求しているので、salary列に格納できる値は-999.99から999.99までの範囲となります。