数据库保存两位小数类型--Decimal

        昨天有个小需求,要在数据库里保存两种占比的数据,说到占比,我第一反应就是要保存成小数,因为编程经验太少了,不知道要定义成什么类型,搜了一下得知,可以设置成DECIMAL,但我在alter表的时候,写的是DECIMAL类型,但保存之后变成了NUMBER类型,这样我算出来的小数结果就都变成了四舍五入的整数...先说一下,我用的是Oracle数据库。NUMBER的话要设置成 NUMBER(p,s)

声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,,scale的取值范围为-84到127

        我用的Navicat工具,直接在类型上面写NUMBER(8,4)并不成功,原来是后面的那两栏,比例就代表的是小数位数,如图:


        不过我还是想搞明白为什么明明设置的是DECIMAL类型而保存之后却变成了NUMBER

        然后在某网站看到一篇超详解,简直太赞了!简单整理一下分享给大家:

      Oracle只是在语法上支持decimal类型,但是在底层实际上它就是number类型,支持decimal类型是为了能把数据从Oracle数据库移到其他数据库中。Decimal从根本上说应该是数字类型的,因为Oracle数据库内部的数据类型对于数字只有Number类型,都当数字类型处理即可。decimal(8,2)代表数字总共8位长度,小数部分是2位。范围是8位,精确到小数点后2位,并四舍五入,即存6位整数,两位小数。也就是最大值可以是999999.99,可存放2位小数。Oracle中,可以使用to_char函数对数字进行转换,使它变成字符类型.

    Number的话,上面有说了,NUMBER(p,s)  p表示精度,s表示小数点后面的位数,但要注意:

当一个数的整数部分的长度> p-s 时,Oracle就会报错,

当一个数的小数部分的长度> s 时,Oracle就会舍入。

当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

当s > p时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入.

猜你喜欢

转载自blog.csdn.net/alinekang/article/details/79878084