关于double的问题。 System.out.println(0.32*0.01); 输出的是0.0032System.out.println(0.33*0.01); 输出的是0.0033000000000000004为什么加了0。01就会这样呢? double到底是怎么进行运算的? 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你想限制或者四舍五入那么 就format一下就OK至于double 高人lai Java的简单类型不能够精确的对浮点数进行运算 可以用 java.math.BigDecimal; 用BigDecimal类包装一下 在进行精确计算 public class Main { public static void main(String[] args) { double d=2.0; double d2=1.1; System.out.println(d-d2); } }d-d2=0.8999999999999999我觉得与这个类似!以前有个老大给的建议是:参考计算机组成原理上的,浮点数的表示. 或者查ieee754. 已经有人给解决了。仔细看看上面的回复,自己google一下计算机是如何表示浮点数的,或者再把组成原理课本翻翻。 看看计算机组成原理相关的书吧。浮点数的表示及运算都有精度限制的,不是精确的。浮点数的意义就在于牺牲精度,来换取表示范围。比如,double类型绝对值最小能表示到10的-300多次方,最大能到10的300多次方。而定点数,比如int,虽然每一位都是精确的,但它只能表示到21亿。 但double能够保证15位有效数字的精度,对于满足日常的浮点运算需要,足够足够了。——10万亿分之一的误差,好像发射卫星也够了吧。 请教一个编程思路,谢谢 RedHat AS 4 下安装jdk后无法执行相关的命令 默认按钮的方法是什么? java j2se基础类进不去了,只能在这个栏里问了~(关于连接数据库,并查询的问题) public static lockobject=new Object()为什么编译不过? 请教JAVA打印发票设置纸张大小奇怪的问题 linux 下有什么好的开发工具? java中文压缩问题? 中文字符串截取问题 为什么我jbuilder装不上? JFrame界面的小程序 import c:\java\A.class 失败,不知道为什么?
public static void main(String[] args) {
double d=2.0;
double d2=1.1;
System.out.println(d-d2);
}
}
d-d2=0.8999999999999999我觉得与这个类似!以前有个老大给的建议是:
参考计算机组成原理上的,浮点数的表示.
或者查ieee754.
仔细看看上面的回复,自己google一下计算机是如何表示浮点数的,或者再把组成原理课本翻翻。
浮点数的表示及运算都有精度限制的,不是精确的。
浮点数的意义就在于牺牲精度,来换取表示范围。比如,double类型绝对值最小能表示到10的-300多次方,最大能到10的300多次方。
而定点数,比如int,虽然每一位都是精确的,但它只能表示到21亿。