黑马程序员技术交流社区
标题:
偶然碰到的问题
[打印本页]
作者:
qiucheng1990
时间:
2012-11-28 07:59
标题:
偶然碰到的问题
public static void main(String[] args) {
// TODO Auto-generated method stub
double x=2;
double y=1.1;
System.out.println(x-y);
}
为什么这行代码的结果是0.8999999,而不是0.9呢?
我想要的结果是0.9,该怎样解决呢
作者:
陈龙
时间:
2012-11-28 08:41
可以通过String.format("%.1f",x-y),对x-y进行四舍五入,并且只保留一位小数
public static void main(String[] args) {
// TODO Auto-generated method stub
double x=2;
double y=1.1;
System.out.println(
String.format("%.1f",x-y)
);
}
打印的结果是0.9
作者:
刘子义
时间:
2012-11-28 09:48
这个是java在表示小数中的一个问题,1.1在java中的实际值为1.100000000000000088817841970012523233890533447265625...,并不是咱理想中的1.1,因此在实际应用中计算小数前都要指定精度,并且尽量使用BigDecimal类提供的API方法。
作者:
qianfancy
时间:
2012-11-28 09:52
这个java 浮点运算造成的错误,java只能计算整形,浮点计算都是错误的解决办法
在java中提供了专门的API来搞定。。具体怎么搞的我也不知道
用BigDecimal
public class Test {
public static void main(String[] args) {
System.out.println((new BigDecimal("2.0")).subtract(new BigDecimal("1.9")).doubleValue());
}
}
注意只能传String
b1.add(b2).doubleValue();//----加
b1.subtract(b2).doubleValue();//---减
b1.multiply(b2).doubleValue();//---乘
b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();//---除
注意:除要麻烦点。。。scale 表示表示需要精确到小数点以后几位, 定精度,以后的数字四舍五入。
作者:
付莹
时间:
2012-11-28 11:43
浮点数的精度问题。解决办法如下。(x-y)*10后自动进位,再除10还原数值0.9。
System.out.println((x-y)*10/10);
作者:
彭璞
时间:
2012-11-28 16:08
Java中浮点数(double、float)的计算是非精确计算,请看下面一个例子:
System.out.println(0.05 + 0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);
你的期望输出是什么?可实际的输出确实这样的:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
使用BigDecimal(String)构造器,我们建议,在商业应用开发中,涉及金额等浮点数计算的数据,全部定义为String,数据库中可定义为字符型字段,在需要使用这些数据进行运算的时候,使用BigDecimal(String)构造BigDecimal对象进行运算,保证数据的精确计算。同时避免了科学记数法的出现。如果科学记数表示法在应用中不是一种负担的话,可以考虑定义为浮点类型
这个问题有点难度,我这收集了一个关于精确存储数据的帖子讲的很清楚,有兴趣可以看看
http://blog.csdn.net/tianlincao/article/details/5654880
作者:
陈山
时间:
2012-11-29 21:12
可以对运算的结果进行强制转型成float类型
public static void main(String [] args){
double x=2;
double y=1.1;
System.out.println((float)(x-y));
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2