
<b>当然文档没有错误</b>,文档应该是指在定义字段数据类型为NUMBER时,指定了NUMBER类型的P值,但是没有指定S的值,那么Scale默认就是0,如下测试所示,当时应该是我自己没有完全理解文档意思,当然文档也有误导的嫌疑。
当在指定字段类型为NUMBER时,如果P和S都不指定,那么P和S又是什么值呢?今天特意实验验证了一下,具体实验过程如下:
如上所示,当我插入上面两条记录后,发现如果不指定p和s,NUMBER类型,此时的Scale至少是9,我们继续测试,插入下面数据
如下所示,此时可以看到Scale的值33了,那么Scale的值是否可以继续变大呢?
如下截图所示,插入的记录为12.123456789123456789123456789123456789123,但是显示的值为12.123456789123456789123456789123456789,总共为38位,由于格式化列的缘故,可能导致部分小数位没有显示,
我们继续测试,调整格式化列,我们发现值变为了12.12345678912345678912345678912345678912,总共40位了,Scale的值为38了。这个是为什么呢?不是数字精度为38,意味着最多是38位吗?
继续其它测试,我们发现Sacle的值会随着小数点前面数字的变化而变化,如下所示:
从上面测试可以看出,Scale的值是变化的,跟数据值有关系,目前看来,小数点前的数字位数和小数点后的数字位数相加为40(有时候又是39),为了测试是否这个规律,我特意用下面案例测试一下
这个问题纠结了很久,不明白为什么是39或40,后面在Oracle Database SQL Reference 10g Release 2终于找到解释了,如下所示:
p is the precision, or the total number of significant decimal digits, where the most
significant digit is the left-most nonzero digit, and the least significant digit is the
right-most known digit. Oracle guarantees the portability of numbers with
precision of up to 20 base-100 digits, which is equivalent to 39 or 40 decimal digits
depending on the position of the decimal point.
p是精度,或是有效十进制数的总位数。最大的有效数字是最左边的非零数字,而最小有效位是最右边的数字。 Oracle保证数字的可移植性
精度高达20 base-100 digits,相当于39位或40位十进制数字,取决于小数点的位置。