2011-09-03 44 views
18

della nota:Doctrine 2 - 2 posizioni decimali su un float?

/** 
* @ORM\Column(type="float", scale="2") 
*/ 
protected $curr_price; 

lo sto usando con Symfony 2.

E questo campo diventa un database doppia in MySQL, invece di galleggiante con 2 punti di precisione.

Cosa sto sbagliando? Ho provato a cancellare il DB, reinserendo ecc ...

+1

Anche se non in relazione alla tua domanda, i prezzi memorizzazione come virgola mobile è (in genere) una pessima pratica – Martijn

+0

Si prega di elaborare di più. – Tool

+0

Si prega di consultare http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when. – Martijn

risposta

27

Sia precision e scale proprietà funzionano solo con il tipo decimal mappatura (link). Ti suggerisco di usare il tipo decimal.

Per quanto riguarda il motivo per cui sta creando un doppio campo invece di fluttuare, non ne sono del tutto sicuro. Probabilmente ha a che fare con l'essere compatibile con tutti i database supportati. Non vedo alcuna menzione del tipo di mappatura double quindi presumo che utilizzino lo stesso tipo per entrambi.

8

nel * .yml

curr_price: 
    type: decimal 
    precision: 10 
    scale: 2 
scala
7
/** 
* @ORM\Column(type="float", scale=2) 
*/ 
protected $curr_price; 

dovrebbe essere un numero intero, e se si utilizza una stringa

+0

Secondo [docs] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping): * scala: (opzionale, default 0) La scala per una colonna decimale (esatta numerica) (** si applica solo per la colonna decimale **), che rappresenta il numero di cifre a destra del punto decimale e non deve essere maggiore della precisione. * –