web-dev-qa-db-fra.com

Que signifient échelle et précision lorsque vous spécifiez un type de champ décimal dans Doctrine 2?

Je crée un champ décimal pour conserver un chiffre financier dans Doctrine2 pour mon application Symfony2. 

Actuellement, cela ressemble à ceci:

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

Lorsque j'ai entré une valeur et que cette valeur a été conservée dans la base de données, elle a été arrondie à un entier. Je suppose que je dois définir les types de précision et d’échelle pour le champ, mais j’ai besoin de quelqu'un pour expliquer ce qu’ils font exactement? 

La documentation Doctrine2 dit:

precision: précision d'une colonne décimale (exact numeric) (s'applique uniquement à la colonne décimale)

scale: L'échelle d'une colonne décimale (nombre exact) (s'applique uniquement à la colonne décimale)

Mais cela ne me dit pas beaucoup.

Je suppose que la précision correspond au nombre de décimales à arrondir, alors je suppose que cela devrait être 2, mais quelle est l'échelle? L'échelle est-elle les chiffres significatifs?

Ma déclaration de terrain doit-elle être la suivante? : -

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

Doctrine utilise des types similaires aux types SQL. La décimale est un type à précision fixe (contrairement aux flottants).

Tiré de la documentation MySQL :

Dans une déclaration de colonne DECIMAL, la précision et l'échelle peuvent être spécifiées (et le sont généralement). par exemple:

salaire DECIMAL (5,2)

Dans cet exemple, 5 est la précision et 2 est l'échelle. La précision représente le nombre de chiffres significatifs stockés pour les valeurs et l'échelle représente le nombre de chiffres pouvant être stockés après le point décimal.

Dans SQL standard, DECIMAL (5,2) doit pouvoir stocker toute valeur comportant cinq chiffres et deux décimales. Par conséquent, les valeurs pouvant être stockées dans la colonne salaire vont de -999,99 à 999,99. 

95

Juste une petite remarque: je devais enlever les guillemets de la précision et de la balance des attributs,

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