ITKeyword,专注技术干货聚合推荐

注册 | 登录

Oracle数据库中NUMBER(x,y)数据类型详解

smstong 2015-05-21

推荐:C语言中数据类型的表示范围

问题:sizeof(int) = 2,int的表示范围为什么是-2^15~2^15-1? 答:对于有符号数,最高位为符号位。二进制原码最大值为0111111111111111=2^15-1,最小值为 11111

Oracle的NUMBER数据类型表示十进制的数字,分别从整数位个数和小数位个数进行限制。我们以NUMBER(8,2)为例进行分析。

1 试验准备

建立一个只有一列的表,NUMBER(8,2)表示数字总个数最多为8,小数部分最多2位(推算出整数部分最多8-2=6位)。

create table t1 (c1 number(8,2));

2 分析并实验

2.1 小数部分的处理

小数部分代表着精确程度,NUMBER(8,2)可以保存的小数位最多2位,那么超过2位会怎样呢?

SQL> insert into t1 values(1.234);

1 row created.

SQL> select * from t1;

        C1
----------
      1.23

SQL> delete from t1;

1 rows deleted.

SQL> insert into t1 values(1.235);

1 row created.

SQL> select * from t1;

        C1
----------
      1.24

可见,小数部分对小数点后2位以后的部分采用了四舍五入的算法,1.234存为1.23,而1.235存为1.24。

推荐:ORACLE之 LOB 数据类型

LOB (Large Object)类型 LOB 类型专门用于存储大对象的数据。包括大文本、图形/图形、视频剪切等。最大可以存储 4G 字节的内容。   内部 LOB 的数据存储在数据

2.2 可保存的最大值

既然整数部分最多6位,小数部分最多2位,那么number(8,2)可以表示的最大数字就是999999.99。我们现在插入这个最大的值。

SQL> insert into t1 values(999999.99);

1 row created.

SQL> select * from t1;

        C1
----------
 999999.99

可见这个数字被正确的存储了。
下面插入一个更大大数字999999.991

SQL> insert into t1 values(999999.991);

1 row created.

SQL> select * from t1;

        C1
----------
 999999.99

可以插入,但是被截断为999999.99,其实原因很简单,小数部分的0.991会四舍五入到0.99,舍入后数值成了999999.99,在范围之内。

再看看999999.995。

SQL> insert into t1 values(999999.995);
insert into t1 values(999999.995)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

插入失败!原因是999999.995小数部分舍入后变成了1000000.00,超出了6位整数范围。

2.3可以保存的最小值

负数的范围与正数范围对称,所以最小值为 -999999.99

3 总结

NUMBER(8,2)表示的数字范围为[-999999.99,999999.99]。判断一个给定数字能否在此范围之前,先对小数部分进行四舍五入,然后再来比较。判断步骤:

  • (1)对第3位小数进行四舍五入,得到带2位小数的数字;
  • (2)判断此数字是否在[-999999.99,999999.99]范围内。

推荐:oracle常用数据类型

oracle中常用数据类型分为三大类: number(5,2)表示该数共有5个有效位,其中小数两位。即范围为-999.99~999.99 如果要表示整数,那么后面的小数位不写即可。 如

试验准备分析并实验1 小数部分的处理2 可保存的最大值3可以保存的最小值总结Oracle的NUMBER数据类型表示十进制的数字,分别从整数位个数和小数位个数进行限制。我们以NUMBER(8,2)为

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。