对于plsql数据类型,NUMBER(x)想要知道它可以容纳的小数位后的最大位数(假设我在小数点前只使用了1位数)。是否有一些规则可以推导出来。
答案 0 :(得分:0)
<强>号强>
999 ...(38 9&#39; s)x10 125 最大值
-999 ...(38 9&#39; s)x10 125 最小值可以表示为完整的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
。