2013-02-18 8 views
47

Tworzę pole dziesiętne, aby trzymać figurę finansową w Doctrine2 dla mojej aplikacji Symfony2.Co oznacza skala i dokładność przy określaniu typu pola dziesiętnego w Doctrine 2?

Obecnie wygląda to tak:

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

Kiedy wszedłem wartość i ta wartość była trwało do danych wynika, że ​​w zaokrągleniu do liczby całkowitej. Zgaduję, że muszę ustawić precyzję i skalę dla pola, ale potrzebuję kogoś, kto dokładnie wytłumaczy, co robi?

Doctrine2 documentation mówi:

PRECISION na dokładność dziesiętna (Dokładna numeryczna) kolumny (dotyczy tylko w kolumnie po przecinku) skalę

: Skala dla dziesiętnej (Dokładna numeryczna) kolumny (Obowiązuje tylko dla kolumny dziesiętnej)

Ale to nie mówi mi strasznie dużo.

Zgaduję, że dokładność to liczba miejsc po przecinku, więc zakładam, że powinna wynosić 2, ale jaka jest skala? Czy skala to znaczące liczby?

Czy moja deklaracja terenowa powinna być taka? : -

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

Odpowiedz

81

Doctrine używa typów podobnych do typów SQL. Dziesiętny staje się stałym typem precyzji (w przeciwieństwie do zmiennoprzecinkowych).

pobranych z MySQL documentation:

W deklaracji kolumnowej dziesiętny, dokładność i skala może być (i zwykle jest), określone; Np

wynagrodzenia dziesiętną (5,2)

w tym przykładzie 5 jest precyzja i 2 skali. Precyzja reprezentuje liczbę cyfr znaczących, które są przechowywane dla wartości, a skala reprezentuje liczbę cyfr, które można zapisać po kropce dziesiętnej.

Standardowy SQL wymaga, aby DECIMAL (5,2) mógł przechowywać dowolną wartość z pięcioma cyframi i dwoma miejscami po przecinku, więc wartości, które mogą być przechowywane w zakresie kolumny wynagrodzeń od -999.99 do 999,99.

21

Wystarczy krótka notatka: Musiałem usunąć cytaty z precyzją atrybuty i skali, tak jak poniżej:

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