最近在项目中遇到了一个奇怪的问题,我在做缴费的时候给用户交了100,但是存入到数据库的时候有个时候总差那么一点,比如说99.99,99.98这样的情况都存在,大家有没有遇到过呢?

解决方案 »

  1.   

    真奇怪,你是怎么插入的?是直接用SQL语句,还是用的存储过程呢?那个字段的类型是什么?
      

  2.   

    我是在存储过程里插入的,在插入之前的这个值,是和一个number(16,2)型的数据做过减法。
      

  3.   

    单纯的insert 100 到数据库number字段中,没遇到
    但是如果计算后再插入数据库可能会有1分钱的情况,我们系统在月结算时候,我遇到过金额少1台币的情况
    是因为number型的数字Java端程式对于正负情况 round的不一样照成
      

  4.   

    我的处理都是在oracle里做的也没有用到round函数急死我了我日。。
      

  5.   

    和一个number(16,2)型的数据做过减法。
    估计是这个引起的 你这个具体是怎么运算的?
      

  6.   

    overpayAmt := overpayAmt + v_cur_pay.amount - v_cur_pay.assign_amt;overpayAmt number(16,2);
    v_cur_pay.amount number(16,2);
    v_cur_pay.assign_amt number(16,2);初始overpayAmt oracle系统的默认值
    v_cur_pay.amount存的是100.00
    v_cur_pay.assign_amt 存的是0.00
    使用上面的等式后
    overpayAmt 变成了99.99
      

  7.   


    有个疑问,如果初始overpayAmt oracle系统的默认值
    那就应该是NULL,因为NULL和其他数值进行计算都是NULL,也不应该是99.99。
    建议LZ在代码里加上log或dbms_output,看看运行时的值是多沙。有时很怪的问题其实就是bug。