加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

两个double数相乘,精度不准确问题

(2012-10-30 21:35:49)
标签:

杂谈

分类: 综合

两个double数相乘,精度不准确问题

1.代码

Java code
public static void main(String args[]) { double a = 11540.0; double b = 0.35; double result = a * b; System.out.println("控制台输出:"+a + " * " + b + " = " + result); System.out.println("计算器正确是:" + 4039 ); }



2.输出
控制台输出:11540.0 * 0.35 = 4038.9999999999995
计算器正确是:4039

3.问题
计算器能计算准确,但是如果我在程序中这样操作却出现了不精确的情况
如何能满足我类型是double,但是计算结果又精确一点的?
或者还有什么更好的替换方法?

 

 

解决方法1:

public static void main(String args[]) {

double a = 11540.0;
double b = 0.35;
double result = a * b;
BigDecimal a1
= new BigDecimal(Double.toString(a));
BigDecimal b1
= new
BigDecimal(Double.toString(b));
BigDecimal result1
=
a1.multiply(b1);
System.out.println(
"控制台输出:" + a + " * " + b + " = " + result);
System.out.println(
"控制台输出2:" + a1 + " * " + b1 + " = " + result1);
System.out.println(
"计算器正确是:" + 4039);

}


控制台输出:11540.0 * 0.35 = 4038.9999999999995
控制台输出2:11540.0 * 0.35 = 4039.000
计算器正确是:4039

 

方法2:

    double a = 11540.0;
   
double b = 0.35;
   
   
double result = a * b;
    System.out.println(
"控制台输出:"+a + " * " + b + " = " + result);
    System.out.println(
"计算器正确是:" + 4039 );
   
   
  
    BigDecimal aa
= new BigDecimal("11540.0");
    BigDecimal bb
= new BigDecimal("0.35");

    result
= aa.multiply(bb).doubleValue();

   
    System.out.println(
"控制台输出:"+a + " * " + b + " = " + result);
    System.out.println(
"计算器正确是:" + 4039 );

 

 

控制台输出:11540.0 * 0.35 = 4038.9999999999995
计算器正确是:4039
控制台输出:11540.0 * 0.35 = 4039.0
计算器正确是:4039






 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有