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

40

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

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

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

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

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

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

шкала

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

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

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

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

/**
 * @ORM\Column(type="decimal", precision=2, scale=4)
 */
protected $rate;
Теги:
database
orm
types
doctrine2

4 ответа

73
Лучший ответ

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

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

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

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

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

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

16

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

@ORM\Column(type="decimal", precision=8, scale=2)
7
@Column(type="decimal", precision=5, scale=2) means 123.45
0
 * @ORM\Column(type="decimal", precision=10, scale=2)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню