试一试这个程序:public class Hello {
public static void main(String[] args) {
System.out.println("1.2 * 1.5 = " + 1.2 *1.5);
}
}应该输出 1.2 * 1.5 = 1.80 吧!
可是输出竟是 1.2 * 1.5 = 1.799999999999999 !!
这是为什么?
public static void main(String[] args) {
System.out.println("1.2 * 1.5 = " + 1.2 *1.5);
}
}应该输出 1.2 * 1.5 = 1.80 吧!
可是输出竟是 1.2 * 1.5 = 1.799999999999999 !!
这是为什么?
解决方案 »
- 用startsWith(pre)&endsWith(ext)过滤,关于pre的问题。。。
- 关于Sun指南里用TableSorter给JTable排序问题
- 帮帮我!画直线和画矩形混在一块了!<很简短的代码>
- 一个棘手的java字符串"1110100101010010"的问题
- linux中部署了一个应用,此应用要连接到一个mysql服务器,端口为3306
- 关于IOException的一个问题?
- 求助, 多线程update database question
- 类型转换问题???帮帮我
- 关于数据库问题??????????
- java传递问题
- **我想置换某个文件的某一行文字,怎么做?**
- 大家看看这到面试题目,谢谢。
习惯了就好
由于原生对象保存数值的精度问题,出现这样的情况是很正常的(不管你用什么语言)。因此在java中需要使用BigDecimal 来进行精确计算,
代码如下: java.math.BigDecimal b1=new java.math.BigDecimal(1.2);
java.math.BigDecimal b2=new java.math.BigDecimal(1.5);
System.out.println(b1.multiply(b2,new MathContext(10) ));
好比
.
0.9 = 1;并不是约等于;是绝对等于.可以证明的.
好比
.
0.9 = 1;并不是约等于;是绝对等于.可以证明的.
是的,这两个数字是一样的 1.79...9循环 = 1.80
用c就没有这个问题!
你可以用java.math.BigDecimal。
x*10=9.999...=9+x;
x=1;
java.math.BigDecimal b1=new java.math.BigDecimal(1.2);
java.math.BigDecimal b2=new java.math.BigDecimal(1.5);
System.out.println(b1.multiply(b2));
double num = b1.multiply(b2).doubleValue();
String D1 = new DecimalFormat(".00").format(num);
System.out.println(num);
System.out.println(D1);