2011-09-03 21 views
18

Anotación:Doctrine 2 - 2 lugares decimales en una carroza?

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

estoy usando con Symfony 2.

Y este campo se convierte en una base de datos en MySQL doble en lugar de flotador con una precisión de 2 puntos.

¿Qué estoy haciendo mal? He intentado borrar la base de datos, etc ... volver a insertar

+1

Aunque no está relacionado con su pregunta, los precios de almacenamiento como punto flotante es (por lo general) una muy mala práctica. – Martijn

+0

Por favor, elabore más. – Tool

+0

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

Respuesta

27

Ambos precision y scale propiedades funcionan sólo con el tipo de mapeo decimal (link). Le sugiero que use el tipo decimal.

En cuanto a por qué está creando un campo doble en lugar de flotar, no estoy del todo seguro. Probablemente tiene que ver con ser compatible con todas las bases de datos compatibles. No veo ninguna mención del tipo de mapeo double, así que supongo que usan el mismo tipo para ambos.

8

en el * .yml

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

escala debe ser un número entero, y está utilizando una cadena

+0

De acuerdo con [documentos] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping): * scale: (opcional, predeterminado 0) La escala para una columna decimal (numérica exacta) (** se aplica solo para la columna decimal **), que representa el número de dígitos a la derecha del punto decimal y no debe ser mayor que la precisión. * –