Я создаю десятичное поле для хранения финансового показателя в Doctrine2 для моего приложения Symfony2.
В настоящее время он выглядит так:
/**
* @ORM\Column(type="decimal")
*/
protected $rate;
Когда я ввел значение, и указанное значение было сохранено в базе данных, оно было округлено до целого числа. Я предполагаю, что мне нужно установить типы точности и масштаба для поля, но мне нужен кто-то, чтобы точно объяснить, что они делают?
Документация Doctrine2 говорит:
точность: точность для десятичного (точного числового) столбца (применяется только для десятичного столбца)
шкала: шкала для десятичного (точного числового) столбца (применяется только для десятичного столбца)
Но это не говорит мне очень много.
Я предполагаю, что точность - это число десятичных знаков для округления до, поэтому я предполагаю, что это должно быть 2, но что такое масштаб? Является ли масштаб значительными цифрами?
Должна ли моя полевая декларация?: -
/**
* @ORM\Column(type="decimal", precision=2, scale=4)
*/
protected $rate;
В Doctrine используются типы, похожие на типы SQL. Десятичный тип является фиксированным типом точности (в отличие от поплавков).
Взято из документации MySQL:
В объявлении столбца DECIMAL точность и масштаб могут быть (и обычно указаны); например:
заработная плата DECIMAL (5,2)
В этом примере 5 - это точность, а 2 - масштаб. Точность представляет собой количество значащих цифр, которые хранятся для значений, а шкала представляет количество цифр, которые можно сохранить после десятичной точки.
Стандартный SQL требует, чтобы DECIMAL (5,2) мог хранить любое значение с пятью цифрами и двумя десятичными знаками, поэтому значения, которые могут быть сохранены в столбце зарплаты, варьируются от -999,99 до 999,99.
Простое примечание: мне пришлось удалить кавычки из точности и масштаба атрибутов, например:
@ORM\Column(type="decimal", precision=8, scale=2)
@Column(type="decimal", precision=5, scale=2) means 123.45
* @ORM\Column(type="decimal", precision=10, scale=2)