web-dev-qa-db-ja.com

Doctrine 2で10進フィールドタイプを指定する場合、スケールと精度はどういう意味ですか?

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

現在、次のようになっています。

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

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

Doctrine2ドキュメント は次のように述べています:

precision:10進数(正確な数値)列の精度(10進数列にのみ適用)

スケール:10進数(正確な数値)列のスケール(10進数列にのみ適用)

しかし、それは私にひどいことを教えてくれません。

私は精度が丸める小数点以下の桁数だと推測しているので、それは2であるべきだと思いますが、スケールとは何ですか?スケールは有効数字ですか?

私のフィールド宣言はこれでしょうか? :-

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

DoctrineはSQLタイプに似たタイプを使用します。 10進数は、(floatとは異なり)固定精度型です。

MySQLドキュメント から取得:

DECIMAL列の宣言では、精度とスケールを指定できます(通常は指定されます)。例えば:

給与DECIMAL(5,2)

この例では、5が精度で、2がスケールです。精度は値に格納される有効桁数を表し、スケールは小数点以下に格納できる桁数を表します。

標準SQLでは、DECIMAL(5,2)が5桁と2桁の10進数で任意の値を格納できる必要があるため、給与列に格納できる値の範囲は-999.99〜999.99です。

簡単なメモ:属性の精度とスケールから引用符を削除する必要がありました。

@ORM\Column(type="decimal", precision=8, scale=2)
28
giggsy
@Column(type="decimal", precision=5, scale=2) means 123.45
11
somspeaks
 * @ORM\Column(type="decimal", precision=10, scale=2)
0
Fahim