public class Test {
public static void main(String[] args) {
double i = 23;
double j = 56.21;
double x = 3;
double y = 3.21;
System.out.println(i + j);
System.out.println(x + y);
}
}运行结果:
79.21000000000001
6.21

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【adrain_sengtang】截止到2008-07-26 09:46:45的历史汇总数据(不包括此帖):
    发帖的总数量:8                        发帖的总分数:220                      每贴平均分数:27                       
    回帖的总数量:13                       得分贴总数量:1                        回帖的得分率:7%                       
    结贴的总数量:8                        结贴的总分数:220                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:12.50 %               无满意结分率:9.09  %                  
    敬礼!
      

  2.   

    这个不是无法解释,这是java的默认的情况,java的double型的计算,天生就是不精确的。
      

  3.   

    public class Test {
    public static void main(String[] args) {
    double i = 23.0;
    double j = 56.21;
    double x = 3.0;
    double y = 3.21;
    System.out.println(i + j);
    System.out.println(x + y);
    }
    }
    运行结果:79.21000000000001
    6.21
      

  4.   

    各位 不明白就不要乱说
    以上代码都是 double类型的, 也是运行结果不 对,不是类型转换的原因
    何止java是这样的呢;其他语言也是 不能精确计算小数的
      

  5.   

    double输出要format一下的,不然问题很大
      

  6.   

    首先这要牵涉到JAVA语言中DOUBLE与FLOAT的存储方式:
    他们的二进制存储方式:1.float:
    SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM一位表示符号,8位表示指数(底数为2),用23位来表示参数2.double:
    SEEEEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM一位表示符号,11位表示指数(底数为2),用52位来表示参数举个例子:float 类型的数字0.1的二进制数据形式:float f = 0.1F;
    System.out.println(Float.floatToIntBits(f));//打印1036831949以上程序输出int类型的数据1036831949,它对应的32位二进制数据形式:
    0 01111011 10011001100110011001101所以符号位S是0,指数部分E为01111011,对应无符号整数123,尾数部分的隐含为是1,因此实际的尾数是1.10011001100110011001101以上二进制数据流对应的二进制数学运算表达式为:
    (-1)^0*2^(123-127)*1.10011001100110011001101
    即:
    110011001100110011001101*2^-27
    表达式对应的十进制数据表达式:
    13421773*2^-27所以,表达式的值为:
    0.100000001490116119384765625可见,在内存中,32 为的二进制数科学计数法不能准确地表示0.1。他的误差为0.000000001490116119384765625double 采用64位精度要高,误差为:0.00000000000001
      

  7.   

    有本java解惑,楼主可以去看看!
      

  8.   

    这没有什么自动转换的问题,又不是int+double。我前几天也遇到了double+double出现了这种问题,是数额比较大的两个double相加,设计到钱的问题,最后我改成了BigDecimal这个类型,问题就解决了。好像是关于什么精度的问题。
      

  9.   

    楼主 Google/Baidu 一下 IEEE754