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));
}
展开
 我来答
豪车虫芭竞月19
2011-08-26 · 超过10用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:27.4万
展开全部
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精度了。你试试。
追问
谢谢,float仍然是错的?不知有何高招
匿名用户
2011-08-26
展开全部
用long类型来避免吧
追问
long它不允许小数怎么办,讲讲你的解决办法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
682fmte031
2011-08-27 · TA获得超过236个赞
知道答主
回答量:509
采纳率:0%
帮助的人:325万
展开全部
很多语言都是这样。浮点数在计算机中是有误差的。所以必须使用专门的方式计算。
在Java中,需要使用BigDecmal,而且需要在构造参数使用String类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风动破7728
2011-08-26 · TA获得超过1486个赞
知道答主
回答量:131
采纳率:0%
帮助的人:99.3万
展开全部
可以String来处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
teddy1316
2011-08-26 · 超过14用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:33万
展开全部
用long型的做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式