网上的解释大多千篇一律,自己总结了一些加上课上老师的说法,形成以下汇总内容,如有错误,欢迎指正。
首先预备知识,有效数字是指从左边第一个不是0的数字开始到精确的数字截止。p一般表示有效的位数,s一般表示精确到小数点后几位,其中p:1~38 s:-84~127。
具体情况下面讨论:
1 在s>=0时
精确到小数点后s位,并且在s位上四舍五入,必须保证整个数字的有效位<=p,否则出错,如果出现s>p的情况比如0.01234567 number(4,5)下数值为0.01235
2 在s<0时
与s>=0不一样 比如number(4,-2)是小数点对左边两位进行四舍五入,总共的最大位数是p+|s|=6位,这是必须的,只能比6位小,否则报错,也就是允许的最大值是999949,如果再多一个999950左边两位就会进位 变成七位数 这是不允许的。比如number(5,-2) 如果插入值12345678.9是错误的 因为小数点左边已经有8位 超过5+2=7位。正确实例:number(4,-2) 插入值899949 ,对49进行四舍五为00,为899900.。 比如:1234567 NUMBER(5,-2) 1234600 即使对67五入了也要随后置零
oracle数据库中的数值函数 对左边三个四舍五入round(7844,-3)=8000 直接截取左边三个trunc(7844,-3)=7000
定点数的精度(p)和刻度(s)遵循以下规则: 当一个数的整数部分的长度 > p-s 时,Oracle就会报错 当一个数的小数部分的长度 > s 时,Oracle就会舍入。 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。 当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入