tipo tamaño precisión guardar escala ejemplos ejemplo decimales dato aumentar database symfony orm types doctrine2

database - precisión - tamaño decimal



¿Qué significan escala y precisión al especificar un tipo de campo decimal en Doctrine 2? (4)

Estoy creando un campo decimal para mantener una cifra financiera en Doctrine2 para mi aplicación Symfony2.

Actualmente, se ve así:

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

Cuando ingresé un valor y dicho valor se mantuvo en la base de datos, se redondeó a un número entero. Supongo que necesito establecer los tipos de precisión y escala para el campo, pero ¿necesito que alguien explique exactamente lo que hacen?

La documentación de Doctrine2 dice:

precisión: la precisión para una columna decimal (numérica exacta) (Se aplica solo a la columna decimal)

scale: La escala para una columna decimal (numérica exacta) (Se aplica solo para la columna decimal)

Pero eso no me dice mucho.

Supongo que la precisión es el número de lugares decimales a redondear, así que supongo que debería ser 2, pero ¿qué es la escala? ¿Es la escala las cifras significativas?

¿Debería mi declaración de campo ser esto? : -

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


Doctrine utiliza tipos similares a los tipos de SQL. El decimal es un tipo de precisión fijo (a diferencia de los flotadores).

Tomado de la documentación de MySQL :

En una declaración de columna DECIMAL, la precisión y la escala pueden (y generalmente) especificarse; por ejemplo:

salario DECIMAL (5,2)

En este ejemplo, 5 es la precisión y 2 es la escala. La precisión representa el número de dígitos significativos que se almacenan para los valores, y la escala representa el número de dígitos que se pueden almacenar después del punto decimal.

El SQL estándar requiere que DECIMAL (5,2) sea capaz de almacenar cualquier valor con cinco dígitos y dos decimales, por lo que los valores que se pueden almacenar en el rango de columna de salario de -999.99 a 999.99.


Solo una nota rápida: tuve que eliminar las comillas de los atributos de precisión y escala, así:

@ORM/Column(type="decimal", precision=8, scale=2)


* @ORM/Column(type="decimal", precision=10, scale=2)


@Column(type="decimal", precision=5, scale=2) means 123.45