double + double 问题 doublejava数据类型 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 小数在计算机中都是近似存储的,两个近似存储的数据一起计算,得到的就更近似了楼主可以给结果取近似值或 使用 BigDecimal bd1 = new BigDecimal(0.8);BigDecimal bd2 = new BigDecimal(47.9);System.out.println(bd1.add(bd2));得到的更近似的值 或使用BigDecimal bd3 = new BigDecimal(new Double(0.8).toString());BigDecimal bd4 = new BigDecimal(new Double(47.9).toString());System.out.println(bd3.add(bd4));得到精确值 原因在于浮点数使用二进制表示的,小数部分用2^-1+2^-2……表示.类似的式子2.0-1.1 = 0.899999。必要时要用bigdecimal double 确实不可以,double取得只能是近似值浮点数存储时就已经近似存储了,再计算,就更近似了 如果数据比较多的情况下,这种方法会影响处理速度吗?这对CPU来说都是小case,现在主要的瓶颈是传输速度更不是CPU的处理速度,所以缓存技术无处不在 如果数据比较多的情况下,这种方法会影响处理速度吗?这对CPU来说都是小case,现在主要的瓶颈是传输速度更不是CPU的处理速度,所以缓存技术无处不在受教了 原来的问题在于:计算机内部用2进制保存数字,正好遇到不能用2进制严格表达的double了(比较像十进制数无法精确表达1/3一样)比如(0.8 + 0.8就能精确地计算出来1.6)非要用double的一种解决办法【应该是一种数值计算方法】:package topics_390901294;public class DoubleTest { public static void main(String[] args) { double d1 = 0.8; double d2 = 47.9; System.out.println(d1 + d2); System.out.println((d1 * 10.0 + d2 * 10.0) / 10.0); }}输出:48.69999999999999648.7 double虽然是双精度,但是计算机语言是01语言二进制,就和十进制的10除以3一样有除不尽的时候,所以会出现那种情况 做了论坛上迅雷笔试关于线程的题目,发现自己程序的问题,大家来讨论讨论 在jsp中静态包含和动态包含又什么区别啊 关于擦出的补偿问题 如何判断自己用Runtime生成的Process进程是否已经关闭 请教一个窗口在屏幕里居中的问题 JAVA中StreamTokenizer类判断行结束标识的问题!!!!!!!!!!!! 如何根据以下条件构造3维数组 java程序能否调用系统的共享内存 如何用本地化方法在java中实现一个delphi 编写的算法(已打包成.dll)? 求大神看看 这哪里有错啊!~~~ for里面的if判断,加在for里面 如何根据查询泛型型别创建对象?
楼主可以给结果取近似值
或 使用 BigDecimal bd1 = new BigDecimal(0.8);
BigDecimal bd2 = new BigDecimal(47.9);
System.out.println(bd1.add(bd2));
得到的更近似的值
或使用BigDecimal bd3 = new BigDecimal(new Double(0.8).toString());
BigDecimal bd4 = new BigDecimal(new Double(47.9).toString());
System.out.println(bd3.add(bd4));
得到精确值
浮点数存储时就已经近似存储了,再计算,就更近似了
受教了
计算机内部用2进制保存数字,正好遇到不能用2进制严格表达的double了(比较像十进制数无法精确表达1/3一样)
比如(0.8 + 0.8就能精确地计算出来1.6)非要用double的一种解决办法【应该是一种数值计算方法】:
package topics_390901294;public class DoubleTest {
public static void main(String[] args) {
double d1 = 0.8;
double d2 = 47.9;
System.out.println(d1 + d2);
System.out.println((d1 * 10.0 + d2 * 10.0) / 10.0);
}
}
输出:
48.699999999999996
48.7