Подтвердить что ты не робот

Что означает масштабирование и точность при указании типа десятичного поля в Doctrine 2?

Я создаю десятичное поле для хранения финансового показателя в Doctrine2 для моего приложения Symfony2.

В настоящее время он выглядит так:

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

Когда я ввел значение, и указанное значение было сохранено в базе данных, оно было округлено до целого числа. Я предполагаю, что мне нужно установить типы точности и масштаба для поля, но мне нужен кто-то, чтобы точно объяснить, что они делают?

Документация Doctrine2 говорит:

точность: точность для десятичного (точного числового) столбца (применяется только для десятичного столбца)

шкала

: шкала для десятичного (точного числового) столбца (применяется только для десятичного столбца)

Но это не говорит мне очень много.

Я предполагаю, что точность - это число десятичных знаков для округления до, поэтому я предполагаю, что это должно быть 2, но что такое масштаб? Является ли масштаб значительными цифрами?

Должна ли моя полевая декларация?: -

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

Ответ 1

В Doctrine используются типы, похожие на типы SQL. Десятичный тип является фиксированным типом точности (в отличие от поплавков).

Взято из документации MySQL:

В объявлении столбца DECIMAL точность и масштаб могут быть (и обычно указаны); например:

заработная плата DECIMAL (5,2)

В этом примере 5 - это точность, а 2 - масштаб. Точность представляет собой количество значащих цифр, которые хранятся для значений, а шкала представляет количество цифр, которые можно сохранить после десятичной точки.

Стандартный SQL требует, чтобы DECIMAL (5,2) мог хранить любое значение с пятью цифрами и двумя десятичными знаками, поэтому значения, которые могут быть сохранены в столбце зарплаты, варьируются от -999,99 до 999,99.

Ответ 2

Простое примечание: мне пришлось удалить кавычки из точности и масштаба атрибутов, например:

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

Ответ 3

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

Ответ 4

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