2012-06-11 14 views
6

Jak ustawić dokładność dziesiętną i skalę w jednostce symfony2? Mam zdefiniowane swobodę w geograficznej dziedzinach wykorzystujących dziesiętny typ danych w mojej jednostce tak:Zaokrąglony dziesiętny w formularzu edycji Symfony2 + Doctrine2

/** 
* @ORM\Column(type="decimal", precision="10", scale="6", nullable=true) 
*/ 
protected $latitude; 

Przy utrzymującej się nowy obiekt to zapisuje poprawnie po przecinku (widzę 52.406374 w phpMyAdmin). Jednak podczas wyświetlania formularza edycji liczba jest zaokrąglana do 52,406, a po aktualizacji jest przechowywana w mysql jako 52.406000. Prawdopodobnie coś jest nie tak z moją konfiguracją Doctrine, ale nie wiem co.

Dlaczego długość i szerokość geograficzna są zaokrąglane?

Znaleziono rozwiązanie:

Składnik Kształt symfony powoduje dziesiętny pole formie jako type = "text". Podczas korzystania z:

->add('latitude', 'number', array(
    'precision' => 6, 
)) 

Jest renderowany prawidłowo. Wątek z komentarza nie opisuje mojego problemu. Wydaje mi się, że już naprawili błąd z precyzją "Konwertuj na zmienną". Kiedy wyświetlałem szerokość geograficzną w szablonie gałązkowym, pokazywałem prawidłową (niezaokrągloną) wartość.

+0

Czy nie jest to spowodowane przez [to] (http://stackoverflow.com/questions/5635500/doctrine-2-decimal-can-only-contain-14-digits)? – jkucharovic

Odpowiedz

2

Być może problem nie wynika z mapowania Twojej doktryny. Zobacz dokumentację referencyjną dla NumberType.

Tego używasz? Prawdopodobnie musisz zmienić dokładność.

+0

Masz rację - już opublikowałem edycję. –

+0

Och, przepraszam ...:/ –

+0

Byłeś 1 minutę szybciej –

1

W Symfony3.2 należy użyć skala:

$builder->add('lat', NumberType::class, array('scale' => 8)); 

ten określa, ile miejsc po przecinku będzie mógł aż dziedzinie rundy przedłożone wartości (poprzez rounding_mode). Na przykład, jeśli skala jest ustawiona na 2, przesłana wartość 20.123 zostanie zaokrąglona do, dla przykład, 20.12 (w zależności od twojego trybu zaokrąglania).

Powiązane problemy