oracle中number数值类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中number数值类型相关的知识,希望对你有一定的参考价值。
123.89 NUMBER(4,2) exceeds precision (有效位为5, 5 > 4),而 123.89 NUMBER(3) 显示124 第二个不会损失
第二个不会损失精度吗?
oracle数据库数值类型
---恢复内容开始---
内容摘自网络
Oracle的数值类型有int,number,float,decimal,numberic等。
NUMBER类型
定义
定义格式NUMBER (precision,scale)
precision表示数字中的有效位(从左边第一个不为0的数算起,小数点和负号不计入有效位数),取值范围为【1-38】默认38。
scale表示精确到多少位,取值范围为【-84-127】,默认值为0。大于零时,表示数字精确到小数点右边的位数;小于零时,将把该数字取舍到小数点左边的指定位数,所以,NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数,并且,如果precision小于scale,表示存储的是没有整数的小数。
关于number的精度(p)和刻度(s)遵循以下规则:
1) 当一个数的整数部分的长度> p-s 时,Oracle就会报错
2) 当一个数的小数部分的长度> s 时,Oracle就会舍入。
3) 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。
4) 当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入
案例
实际值 |
数据类型 |
存储值 |
1234567.89 |
Number |
1234567.89 |
1234567.89 |
Number(8) |
1234567 |
1234567.89 |
Number(6) |
出错 |
1234567.89 |
Number(9,1) |
1234567.9 |
1234567.89 |
Number(9,3) |
出错 |
1234567.89 |
Number(7,2) |
出错 |
1234567.89 |
Number(5,-2) |
1234600 |
1234511.89 |
Number(5,-2) |
1234500 |
1234567.89 |
Number(5,-4) |
1230000 |
1234567.89 |
Number(*,1) |
1234567.9 |
0.012 |
Number(2,3) |
0.012 |
0.23 |
Number(2,3) |
出错 |
NUMBER类型的子类
decimal,numeric,int等都为SQL、DB2等数据库的数据类型,ORACLE为了兼容才将其引入;但实际上在ORACLE内部还是以NUMBER的形式将其存入,所以在集合关系上它们也都是number的子集。
int类型只能存储整数;
在oracle数据库建表的时候,decimal,numeric不带精度,oracle会自动把它处理成INTEGER;带精度,oracle会自动把它处理成number。
Oracle只用NUMBER(m,n)就可以表示任何复杂的数值数据。
---恢复内容结束---
以上是关于oracle中number数值类型的主要内容,如果未能解决你的问题,请参考以下文章