JAVA 中出现double 及float计算丢失精度的问题,大家是怎么避免的
staticvoiddoubleErr(){doublea1=9.959955;doublea2=1.01;System.out.println("double类型产生了...
static void doubleErr() {
double a1 = 9.959955;
double a2 = 1.01;
System.out.println("double类型产生了错误请看: " + (a1 - a2));
}
static void floatErr() {
float f1 = 1.3284544f;
float f2 = 1.32f;
System.out.println("F1-F2 float浮点型产生了错误: " + (f1 - f2));
} 展开
double a1 = 9.959955;
double a2 = 1.01;
System.out.println("double类型产生了错误请看: " + (a1 - a2));
}
static void floatErr() {
float f1 = 1.3284544f;
float f2 = 1.32f;
System.out.println("F1-F2 float浮点型产生了错误: " + (f1 - f2));
} 展开
5个回答
展开全部
static void doubleErr() {
double a1 = 9.959955;
double a2 = 1.01;
double a3 = a1 - a2;
DecimalFormat df = new DecimalFormat("#.000000");
System.out.println("double: " + df.format(a3));
}
static void floatErr() {
float f1 = 1.3284544f;
float f2 = 1.32f;
BigDecimal n = new BigDecimal((f1 - f2));
BigDecimal n2 = n.setScale(7, BigDecimal.ROUND_FLOOR);
System.out.println("F1-F2 : " + n2);
}
这样就能格式化double,和控制float精度了。你试试。
double a1 = 9.959955;
double a2 = 1.01;
double a3 = a1 - a2;
DecimalFormat df = new DecimalFormat("#.000000");
System.out.println("double: " + df.format(a3));
}
static void floatErr() {
float f1 = 1.3284544f;
float f2 = 1.32f;
BigDecimal n = new BigDecimal((f1 - f2));
BigDecimal n2 = n.setScale(7, BigDecimal.ROUND_FLOOR);
System.out.println("F1-F2 : " + n2);
}
这样就能格式化double,和控制float精度了。你试试。
追问
谢谢,float仍然是错的?不知有何高招
2011-08-26
展开全部
用long类型来避免吧
追问
long它不允许小数怎么办,讲讲你的解决办法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很多语言都是这样。浮点数在计算机中是有误差的。所以必须使用专门的方式计算。
在Java中,需要使用BigDecmal,而且需要在构造参数使用String类型。
在Java中,需要使用BigDecmal,而且需要在构造参数使用String类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以String来处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用long型的做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询