搂主,你的jdk什么版本?看看我这JDK1.3的输出:
-1234567890123.12350

解决方案 »

  1.   

    double类型的有效位数为15位
    只与后台数据库有关,与jdk无关吧
      

  2.   

    感谢各位,应该就是bobbysun(海豚) 说的原因吧
    后台数据库是oracle8i
    看来要用BigDecimal取数据。
      

  3.   

    但是刚刚又看了一下
    java中对double的定义是-2的31次方-1到2的31次方
    我算了一下是-9223372036854775807到9223372036854775807,有19位
    有效位数为15位从何说起
    弟子愚笨,请有以教我
      

  4.   

    另外有个附带的奇怪问题:
    后台数据库是oracle8i
    我用access连接数据库,可以做进满位数据-1234567890123.12345
    用toad连接数据库,却最多只能做出-1234567890123.12,竟然和我程序执行效果一样。
    为什么?
      

  5.   

    关注.
    需要精确数值地话,sun官方说法是建议使用bigDecimal
      

  6.   

    为什么double类型的有效位数为15位?搞不懂啊!
      

  7.   

    水户洋平————这个名字我喜欢。double的有效数位是15~16位, 简单给你说说意思吧。比如你用8个bit存储浮点位(float是32 bit,double是64 bit) 每个bit只能存0或1,你说你怎么作?8 bit 一共能存256种可能,所以整型就是-128~127。 换个想法,我们不要精确数字,希望它能表示更大的范围,我们用第一个bit存储正负号,还剩7 bit,再用后3位表示指数次方,中间就只有4 bit表示数了。 4 bit能表示16种可能,加上符号2种、指数8种,我们还是只能表示256种可能!———— 打住! 我们并没有要精确数字,所以我们总可以把某个数转换成 0.xxx*10^x 形式(科学计数法) 假设,我说的是假设,指定0001表示0.1,1001表示0.9,其它的值是期间平均分派值,一共只用了9个数。(真正的浮点数用的是二进制的小数形式)。 指数表示-3~4,8种可能,这样我们能表达的最小正数是0.0001,最大数是9000,最小负数是-9000,最大负数是-0.0001 。于是我们可以表达几乎正负10000以内数了! 但是————只有一位有效数字,表示数的范围大了,但精度降低了(简直是没有精度),这就是计算机表示浮点数的方法了。 我们只用了16种可能中的9种,假使我们用0000表示0.01,用1111表示0.99,其它的在其中平分,我们得到的有效数字介于1位和2位之间,这就是为什么有时候double的精度是15位,而有时候又是16位了。 还有,你会发现double的下限和上限值并不相同,原理和这类似。
      

  8.   

    :qiaojiannan(JNQ) 你让我完全明白了,
    谢谢!
      

  9.   

    :qiaojiannan(JNQ) 你让我完全明白了,
    谢谢!
      

  10.   

    :qiaojiannan(JNQ) 你让我完全明白了,
    谢谢!