it-swarm.com.de

Was bedeuten Skalierung und Präzision, wenn Sie in Doctrine 2 einen Dezimalfeldtyp angeben?

Ich erstelle ein Dezimalfeld, um eine Finanzkennzahl in Doctrine2 für meine Symfony2-Anwendung zu speichern. 

Derzeit sieht es so aus:

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

Als ich einen Wert eingegeben habe und der Wert in der Datenbank gespeichert wurde, wurde er auf eine ganze Zahl gerundet. Ich vermute, dass ich die Genauigkeits- und Skalentypen für das Feld festlegen muss, aber ich brauche jemanden, der genau erklärt, was sie tun? 

Die Doctrine2-Dokumentation sagt:

genauigkeit: Die Genauigkeit für eine dezimale (genaue numerische) Spalte (Gilt nur für eine Dezimalspalte)

scale: Die Skala für eine Dezimalspalte (genau numerisch) (Gilt nur für Dezimalspalte)

Aber das sagt mir nicht viel.

Ich vermute, Genauigkeit ist die Anzahl der Dezimalstellen, auf die gerundet werden soll. Ich gehe davon aus, dass dies 2 sein sollte, aber was ist der Maßstab? Ist der Maßstab die signifikanten Zahlen?

Sollte meine Felddeklaration so sein? : -

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

Doctrine verwendet ähnliche Typen wie die SQL-Typen. Dezimal ist ein fester Genauigkeitstyp (im Gegensatz zu Floats).

Aus der MySQL-Dokumentation entnommen :

In einer DECIMAL-Spaltendeklaration können (und werden normalerweise) die Genauigkeit und der Maßstab angegeben werden. zum Beispiel:

gehalt DECIMAL (5,2)

In diesem Beispiel ist 5 die Genauigkeit und 2 die Skala. Die Genauigkeit gibt die Anzahl der signifikanten Stellen an, die für Werte gespeichert sind, und die Skala stellt die Anzahl der Ziffern dar, die nach dem Dezimalpunkt gespeichert werden können.

Standard-SQL erfordert, dass DECIMAL (5,2) in der Lage ist, einen beliebigen Wert mit fünf Ziffern und zwei Dezimalstellen zu speichern. Die Werte, die in der Gehaltsspalte gespeichert werden können, liegen zwischen -999,99 und 999,99. 

Nur eine kurze Anmerkung: Ich musste die Anführungszeichen aus den Attributen Genauigkeit und Skalierung entfernen:

@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