float 和 real
用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。正因为float的用近似数字,所以被截位是很正常的,没有什么函数来解决.

解决方案 »

  1.   

    如果楼主要准确的数据,改用numeric/decimal类型就不会产生这个问题了.decimal 和 numeric
    带定点精度和小数位数的 numeric 数据类型。decimal[(p[, s])] 和 numeric[(p[, s])]定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。p(精度)指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。默认精度为 18。s(小数位数)指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变化。精度 存储字节数 
    1 - 9 5 
    10-19 9 
    20-28 13 
    29-38 17 
      

  2.   

    float是这样的,它的小数位有点不可控,因为它是近似数,存储的不是实际的数据,是一个计算关系什么的(以前记得有本书是这么说的),取数的时候再通过算法得到结果,所以像上面的情况是正常的.
      

  3.   

    完全同意邹老的观点,用numeric/decimal类型就不会产生这个问题了.