zoukankan      html  css  js  c++  java
  • 关于number...的精度问题

    当数字的精度被定为number(3,2)时, 这时他能输入的数字整数部分只能是3-2=1位, 小数位如果不够会用0补齐, 超出的四舍五入保留3位小数. 

    SQL> insert into t_te(num1) values(45.67882);
    insert into t_te(num1) values(45.67882)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num1) values(12.3);
    insert into t_te(num1) values(12.3)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num1) values(1.3);
    1 row inserted

    SQL> select num1 from t_te;
    NUM1
    -----
    1.30


    当数字的精度被定为number(3,0)时, 这时能输入的数字整数部分只能是小于5位的, 小数部分全部四舍五入, 只留下整数. 这种情况在给定义列的数据类型的时候会被系统默认成number(3).

    SQL> insert into t_te(num2) values(123.45);
    1 row inserted

    SQL> select num2 from t_te;
    NUM2
    ----
    123

    SQL> insert into t_te(num2) values(1234.45);
    insert into t_te(num2) values(1234.45)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num2) values(1.45);
    1 row inserted

    SQL> select num2 from t_te;
    NUM2
    ----
    123
    1

    SQL> insert into t_te(num2) values(1.89);
    1 row inserted

    SQL> select num2 from t_te;
    NUM2
    ----
    123
    1
    2


    当数字的精度被定为number(2,3)时, 这时能输入的数字就只能是小数了, 而且只能是小数点后(3-2=1)位小数, 整数位不能有数字.

    SQL> insert into t_te(num3) values(1.89);
    insert into t_te(num3) values(1.89)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num3) values(0.89);
    insert into t_te(num3) values(0.89)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num3) values(0.089);
    1 row inserted

    SQL> select num3 from t_te;
    NUM3
    ----
    0.08

    当数字的精度被定为number(3,-2)时, 这时输入的数字可以是任何一个整数部分小于5(3-(-2))位, 小数部分随意的数字, 但是系统会四舍五入保留百位显示.

    SQL> insert into t_te(num4) values(12.3456);
    1 row inserted

    SQL> insert into t_te(num4) values(122.3456);
    1 row inserted

    SQL> insert into t_te(num4) values(1222.3456);
    1 row inserted

    SQL> insert into t_te(num4) values(122234253524.3456);
    insert into t_te(num4) values(122234253524.3456)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num4) values(12223.3456);
    1 row inserted

    SQL> insert into t_te(num4) values(122236.3456);
    insert into t_te(num4) values(122236.3456)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> select num4 from t_te;
    NUM4
    -----
    0
    100
    1200
    12200


    当数字的精度被定为number(2,-3)时, 这时能输入的数字只要整数部分不超过5(2-(-3))位, 都不会报错, 小数位会直接被四舍五入. 系统只显示整数部分

    SQL> insert into t_te(num5) values(12345);
    1 row inserted

    SQL> insert into t_te(num5) values(12345723);
    insert into t_te(num5) values(12345723)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num5) values(123456);
    insert into t_te(num5) values(123456)
    ORA-01438: 值大于为此列指定的允许精度

    SQL> insert into t_te(num5) values(12345.345678);
    1 row inserted

    SQL> select num5 from t_te;
    NUM5
    ----
    12000
    12000

  • 相关阅读:
    从零开始编写自己的C#框架(7)——需求分析
    从零开始编写自己的C#框架(6)——SubSonic3.0插件介绍(附源码)
    Vim技能修炼教程(13)
    Linux存储入门:简易数据恢复方案--分区和LVM实战
    物联网如何跳出“看起来很美”?
    农业的未来:物联网农业传感器农业无人机
    综合布线系统技术是建设智慧城市的血脉
    7月13日云栖精选夜读:什么才是这个时代最需要的BI人员? —— 阿里云MVP赵玮主题分享
    阿里巴巴集团技术委员会主席王坚:我曾经被诺贝尔奖得主司马贺忽悠_相信人工智能就是未来!
    如何送货最省钱?菜鸟自研核心引擎架构首次曝光!
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/4936312.html
Copyright © 2011-2022 走看看