添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

【问题分析】

Ⅰ、在前端界面查询,发现了库存中存在这样的数量值。但是在数据库中查询时显示正常。即6.999999999999997 为 7。

Ⅱ、至于这种小数产生,我以为是oracle存储过程计算的时候也会失真?后来发现我这是由于其他问题造成的。

🌂对于前端和数据库的查询结果不一致,我也很纳闷。于是,我把数据里面的7,进行重写,这样前端就显示正常了。于是我推断,前端界面显示的数据库值是准确的,而我们查询的结果进行了一些处理,导致6.999999999999997查看到的结果是7。

Ⅳ、数据库会默认6.999999999999997为Number,查询的结果如下:

🌫如果我们将Number类型的数据进行一个to_char的处理,如下:(可以发现,数据完整显示)

⑥前端显示 2E-12 ,那么它实际的值是多少呢?可以通过  to_char() 来显示它原来的值。最后发现0.000000000002这样的值,number类型显示如下:

【知识补充】

①百度知识

  • Oracle Number类型是以十进制形式存储整数和浮点数,语法为 Number( p , s ) 。
  • 其中 p 为精度,即所有有效数字位数; s 为刻度范围,即小数位数。 p 的取值范围是 1~38 ,s的取值范围范围从 -84 127
  • 在此我也查询了一些资料,精度和刻度的限制是在插入时,根据精度和刻度对插入的值进行一个四舍五入的处理以及限制。并没有提到和 select 查询的关系。
  • PS:看完这写也并不知道说的是···,感觉自己没用到这东西。但是大概的意思是:

  • 我们是设计数据库的时候,常用的类型用 VARCHAR2 类型,一般我们会指定 字符的长度,好像是必须指定的。但是 Number 类型我们一般不设置他的精度和刻度范围。
  • 那么这个精度和刻度就是像 VARCHAR2 写法相同。如下:
  • p设置为0,s设置大于0,会提示类型不正确
  •        NUMBER(0,5)
  • p设置为大于0,s设置0,显示为 Number(p)
  • NUMBER ( 5 , - 2 ) 表示有效位为5位,小数点左边两位进行四舍五入。即 插入11268  存11300
  • NUMBER ( 5 , 2 ) 表示有效位5位,小数位后最多两位进行四舍五入。即插入 123.356 存 123.36
  • 如果四舍五入后的位数超过最大有效位置,将会出错。即 NUMBER(5,-1) 插入 99999 四舍五入之后 100000 超过有效位数出错。
  • 保留到小数点后几位不看有效位数。
  •     NUMBER(*,1)

    ②我们一般会直接使用Number类型,那么默认的 精度和刻度 又是多少呢?

  • 创建一张表作为测试
  •     create Table num_dome ( 
            NUM_VAL NUMBER 
    
  •   将数据类型设置为NUMBER类型,我们插入一个除不尽的小数,以此来判断它的最大刻度。
  •     insert into num_dome values (2/3)

        PS: 最大精度38,这里小数位后有39位什么意思?

  • select 查询查看显示结果(小数点后15位)
  • 插入的值是有小数的,并且不为0 ,说明刻度 s  大于0 ,若 s>0 那么最大有效位为 p,即39??p的取值范围为 1~38 ?
  • 若 p就为39,那么 s 的值好像是变化的 s=39-p。他们是否存在这样的一个动态关系?是否 s 一定要是一个明确的数字?
  • select查询和数据库存储相同,只不过把位数缩短了,取15位进行显示。
  •   这些问题其实并没有太大的影响,但一直想弄明白。包括也查了一些资料,并没有得到确切的答案。

      本文是自己对Number类型精度刻度的思考,如有错误,请务必告知。(这篇一直零散的写了几天,一直在想通过什么样的方式去测试,以及能够得出什么样的结论)