Oracle Number precision scale

Oracle NUMBER 类型详解
本文详细介绍了Oracle数据库中NUMBER类型的使用方法及注意事项,包括精度、规模的设置与数据的有效位计算,帮助理解如何正确地存储数值数据。

 The Oracle NUMBER type is capable of storing numbers with an extremely large degree of precision - 38 digits of precision, in fact. The underlying data format is similar to a "packed decimal" representation. The Oracle NUMBER type is a variable-length format from 0 to 22 bytes in length. It is appropriate for storing any number as small as 1.0e(-130) and numbers up to but not including 1.0e(126). This is by far the most common NUMBER type in use today.

 

1>.NUMBER类型细讲:
Oracle number datatype 语法:NUMBER[(precision [, scale])]
简称:precision --> p
      scale     --> s

NUMBER(p, s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126  
保存在机器内部的范围: 1 ~ 22 bytes

有效位:从左边第一个不为0的数算起的位数。
s的情况:
s > 0
   精确到小数点右边s位,并四舍五入。然后检验有效位能不能 <= p。
s < 0
   精确到小数点左边s位,并四舍五入。然后检验有效位能不能 <= p + s。
s = 0
   此时NUMBER表示整数。

eg:
Actual Data   Specified As Stored As
----------------------------------------
123.89           NUMBER         123.89
123.89           NUMBER(3)     124
123.89           NUMBER(6,2)   123.89
123.89           NUMBER(6,1)   123.9
123.89           NUMBER(4,2)   exceeds precision (有效位为5, 5 > 4)
123.89           NUMBER(6,-2) 100
.01234           NUMBER(4,5)   .01234 (有效位为4)
.00012           NUMBER(4,5)   .00012
.000127       NUMBER(4,5)   .00013
.0000012      NUMBER(2,7)   .0000012
.00000123     NUMBER(2,7)   .0000012
1.2e-4           NUMBER(2,5)   0.00012
1.2e-5           NUMBER(2,5)   0.00001
123.2564      NUMBER        123.2564
1234.9876     NUMBER(6,2)   1234.99
12345.12345   NUMBER(6,2)   Error (有效位为5+2 > 6)
1234.9876     NUMBER(6)     1235 (s没有表示s=0)
12345.345     NUMBER(5,-2) 12300
1234567       NUMBER(5,-2) 1234600
12345678      NUMBER(5,-2) Error (有效位为8 > 7)
123456789     NUMBER(5,-4) 123460000
1234567890    NUMBER(5,-4) Error (有效位为10 > 9)
12345.58      NUMBER(*, 1) 12345.6
0.1           NUMBER(4,5)   Error (0.10000, 有效位为5 > 4)
0.01234567    NUMBER(4,5)   0.01235
0.09999       NUMBER(4,5)   0.09999

 

出处:http://www.yqdown.com

### Oracle Number 数据类型的精度和标度 #### 精度 (Precision) 在Oracle数据库中,`NUMBER`类型通过两个参数来定义其行为:精度 (`precision`) 和标度 (`scale`)。精度是指定数字的总位数,范围是从1到38[^3]。 对于未指定精度的情况,`NUMBER`类型能够存储任意大小的数值,但这种做法可能导致不可预测的结果,因为Oracle会根据实际输入调整内部表示形式[^1]。 ```sql CREATE TABLE example ( value NUMBER -- 不推荐的做法 ); ``` #### 标度 (Scale) 标度决定了小数点右侧的有效位数,取值可以从-84至127。如果标度为正值,则意味着允许存在小数部分;如果是负值,则会对整个数值进行四舍五入处理。 当创建表结构并设定列属性时,建议总是显式声明这两个参数以确保预期的行为: ```sql CREATE TABLE sales_data ( product_id VARCHAR2(50), quantity_sold NUMBER(9, 2), -- 可保存最大值为999,999.99 price_per_unit NUMBER(7, 2) -- 可保存最大值为999,999.99 ); ``` #### 修改现有字段的精度与标度 假设有一个已经存在的字段被定义成 `NUMBER(15, 2)` 并且只含有整数值。为了改变这个字段使其不再保留两位小数而成为纯粹的整数,可以通过修改DDL语句实现这一点。需要注意的是,在执行此类操作之前应该备份数据以防意外发生[^4]。 ```sql ALTER TABLE existing_table MODIFY column_name NUMBER; -- 或者更具体地指明新的精度和标度 ALTER TABLE existing_table MODIFY column_name NUMBER(15, 0); ``` 上述命令将移除原有的小数部分或将它们截断为零,取决于所使用的SQL*Plus或其他工具的具体行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值