mysql 有关金额的问题 1  之前我设置 一个表的a,b,c 3个字段都是double(10,10)
之后执行update a set c=a-b  结果c的数据错误 ,都是  0.999999  -0.99999999999  
不知道为什么会出现这样的错误 ??
(后来随手double(10,2), 这样问题圆满解决,虽然解决了,也不知道原因? )2 有一条数据是
a 1.00000008440786E18          这个数据的值是多少?
b 1.00000010010111E18
c 99999999.99                     -----------------?  是否是错误  c =a-b

解决方案 »

  1.   

    DOUBLE是浮点数,浮点数的运算本身就是不精确的,DOUBLE也名字也就双精度,只不过是精度高了一些,但不表达其能准确的存储一个小数。
    如果需要更精确的金额计算,则建议使用 decimal
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  2.   

    c 99999999.99 -----------------? 是否是错误 c =a-b
    检查发现是数据越界 。  c 是 (10,2) 他不能支持 1.00000008440786e+18 | 1.00000010010111e+18 |      15693252608c 的具体值是 15693252608 但是无法支持 10,2 所以失败
      

  3.   

    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html11.2. 数值类型
      

  4.   

    DOUBLE是浮点数  但是 有个大优点   他能存放的数据是无极限的 
    比如 1.00000008440786E18   他能存储decimal (10,2)就无能为力 , 只能为 99999999.99而当前的哟应用值 的金额是没有限制的 恶 
      

  5.   

    float 应该换为 double
    [16:28:12] bruce:  select * from tnum;
    +------------+ float
    | id         |
    +------------+
    | 1.2911e+12 |
    | 1.2911e+12 |
    | 1.2911e+11 |
    | 1.2911e+11 |
    | 1.2911e+11 |
    +------------129110073344.68+
    5 rows in set
     id            |  double
    +---------------+
    | 1291100749824 |
    | 1291100749824 |
    |  129110073344 |
    |  129110073344 |
    |  129110073344.67776767 |