Для типа данных plsq NUMBER (x) требуется знать максимальное количество цифр после десятичного места, которое оно может удерживать (при условии, что я использую только 1 цифру до десятичной точки). Есть ли какое-то правило, с помощью которого это можно получить.Сколько цифр, включая после десятичной точки, может удерживать NUMBER (x)?
ответ
НОМЕР
999 ... (38 9 в) x10 максимальное значение
-999 ... (38 9 в) x10 минимальное значениеМожет быть представлено до полной 38-значной точности (мантиссы).
Проще говоря, у вас есть 38 значащих (десятичных) цифр.
Учитывая ваш случай, если вы используете 1 цифра перед тем десятичную точку, вы по-прежнему иметь в своем распоряжении при макс 37 цифр сразу после десятичной точки:
NUMBER(38,37)
Это будет охватывать диапазон:
-9.9999999999999999999999999999999999999
+9.9999999999999999999999999999999999999
с ULP из:
0.0000000000000000000000000000000000001
Это лучше с точки зрения точности, чем IEEE754 floating point numbers, и у вас будет точное представление десятичных чисел.
В качестве побочного сведению, несколько вещей, чтобы знать:
NUMBER(x)
это то же самое, какNUMBER(x,0)
. Это знак десятичного знака целое число.PL/SQL будет отбрасывать числа после десятичного разделителя при выполнении привязки к числу со шкалой, меньшей, чем оригинал. увидеть этот пример:
declare n1 number(12,1); n2 number(11); begin n1 := 12345678901.2; dbms_output.put_line(n1); n2 := n1; -- loose precision here !!! n1 := n2; dbms_output.put_line(n1); dbms_output.put_line(n2); end;
12345678901.2
Отображение, а затем и12345678901
12345678901
Оператор
CAST
будет вести себя точно таким же образом:select CAST(12345678901.2 AS NUMBER(11)) FROM DUAL;
, что приводит к
12345678901
.
Мой запрос относился к переменным, определенным таким образом: v_val number (11), для этого примера, как бы я знал, сколько цифр в целочисленном и десятичном значении возможно, поскольку мы определили 11-значное число ? – shadow0wolf
'number (11)' - это то же самое, что и 'number (11,0)'. То есть точность в 11 цифр, масштаб 0 - другими словами, это [** integer **] (http://en.wikipedia.org/wiki/Integer) в диапазоне '[-99999999999; +99999999999] '. –
ok, я получил его сейчас, ty – shadow0wolf