75

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

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

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

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

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

精度:10進数(正確な数値)列の精度(10進数列にのみ適用されます)

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

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

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

私のフィールド宣言はこれである必要がありますか?:-

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

5 に答える 5

121

DoctrineはSQLタイプと同様のタイプを使用します。Decimalは、(floatとは異なり)固定精度タイプです。

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

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

給与DECIMAL(5,2)

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

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

于 2013-02-18T16:17:09.987 に答える
32

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

@ORM\Column(type="decimal", precision=8, scale=2)
于 2014-03-10T16:15:31.950 に答える
23
@Column(type="decimal", precision=5, scale=2) means 123.45
于 2016-06-06T19:33:57.653 に答える
1

これは古いことは知っていますが、なぜプログラマーはまだ10進数を使用しているのですか... 64ビット整数を使用し、値を整数ではなくセント(または千)として定義してください。すべてがそれから単純化されます。

つまり、123.45を格納する代わりに、12345を格納するだけで、整数に対してすべての計算を実行し、必要に応じて値を123.45としてユーザーに提示します。

PSそして、少なくとも今のところ、誰も2305843009213693952セントまたは23.058.430.092.136.939,52の全体を自分のアカウントに持っていません。

于 2019-10-23T10:37:33.750 に答える
0
 * @ORM\Column(type="decimal", precision=10, scale=2)
于 2014-09-27T14:53:01.807 に答える