为了账号安全,请及时绑定邮箱和手机立即绑定

number(p,s) s为负数为什么用不了

代码部分:

SQL> desc test1123

Name   Type          Nullable Default Comments 

------ ------------- -------- ------- -------- 

ID     INTEGER       Y                         

NAME   NCHAR(8)      Y                         

SALARY NUMBER(6,-8)  Y                         

JOB    NVARCHAR2(10) Y                 

SQL> insert into test1123 (name,job,salary,id) values ('hello','水电费水电费萨顶顶',23.2,2);

1 row inserted

SQL> select * from test1123;

                                     ID NAME                SALARY JOB

--------------------------------------- ----------------- -------- ---------------------

                                      2 hello                    0 水电费水电费萨顶顶

改为 number(6,2)就能写入了,但这个和number(6,-8)不是同一个意思吗

正在回答

3 回答

第二个参数为负数时,以number(6,-2)为例,表示有效位6位,取整至小数点前2位,例子中如果输入123456则结果为123500,注意有四舍五入。 你的例子中-8的绝对值大于6,于是6位有效位被全部截掉并取整为0,所以最终结果为0

1 回复 有任何疑惑可以回复我~

Oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数。m的范围是1-38,即最大38位。

    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表示整数。


0 回复 有任何疑惑可以回复我~

谢谢回答,刚刚试了下,的确如此,但是老师在《3-2 oracle管理表之数据类型》里讲的是:number(p,s)中如果s为负数的时候,那么它就表示从最大有效数字到小数点的位数,不知道是不是我理解错了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

number(p,s) s为负数为什么用不了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信