numeric
принимает как «точность», так и «масштаб». Точность - это общее количество цифр. Масштаб - это сколько из них может быть справа от десятичной дроби. В документации Postgres приведен пример .
Точность числа - это общее количество значащих цифр во всем числе, то есть количество цифр по обеим сторонам десятичной точки. Шкала чисел - это количество десятичных цифр в дробной части справа от десятичной точки. Таким образом, число 23,5141 имеет точность 6 и шкалу 4. Целые числа можно считать равными нулю.
Если вы не предоставите шкалу, по умолчанию она равна 0, что означает, что вы получите целое число. Таким образом, numeric(10)
является целым числом с максимум 10 цифрами. Документы Postgres считают эту «особенность» стандарта SQL особенно бесполезной.
(Стандарт SQL требует шкалы по умолчанию, равной 0, т. Е. Приведение к целочисленной точности. Мы находим это несколько бесполезным. Если вас беспокоит переносимость, всегда указывайте точность и масштаб явно.)
Если вы хотите 1012104.00
, вам понадобится numeric(9, 2)
. 9 цифр, 2 из которых находятся справа от десятичной дроби.