首页 > 其他 > 详细

浮点数精确表示

时间:2017-01-20 16:15:09      阅读:262      评论:0      收藏:0      [点我收藏+]
 1 /**
 2  * 浮点数表示问题
 3  * @author husky
 4  */
 5 public class Change {
 6     public static void main(String[] args) {
 7         double num1 = 2.00;
 8         double num2 = 1.10;
 9         double num3 = 1.90;
10         // 结果:0.8999999999999999
11         System.out.println(num1 - num2);  
12         // 0.10000000000000009
13         System.out.println(num1 - num3);
14         // 1.0
15         System.out.println((num1 - num2) + (num1 - num3));
16         
17         System.out.printf("jdk5 printf : %.2f%n",num1 - num2);
18         //use BigDecimal(String): 0.90
19         //use BigDecimal(Double): 0.899999999999999911182158029987476766109466552734375
20         System.out.println("use BigDecimal(String): " + new BigDecimal("2.00").subtract(new BigDecimal("1.10")));
21         System.out.println("use BigDecimal(Double): " + new BigDecimal(2.00).subtract(new BigDecimal(1.10)));
22     }
23     /**
24      * 解析:
25      * java浮点数表示对于一些小数并不能精确的表示,只能表示成它的临界值;
26      * 但是这只是个别的,详细请参考别处
27      */
28     
29     /**
30      * 解决:
31      *  获取在使用jdk 5.0之后,通过printf得到的是正确的结果,但是底层的问题依然存在
32      *  因此对于涉及需要非常精确的结果,使用浮点数并不合适,尤其是货币运算
33      *  
34      *  方案1:
35      *  将运算进行扩大,使用int,long 进行运算,将2美元表示成200美分进行运算
36      *  
37      *  方案2:
38      *  使用BigDecimal,但要注意使用BigDecimal(String)构造器,不要使用BigDecimal(Double)
39      *  后者与上面的情况类似的
40      */
41 }

 

浮点数精确表示

原文:http://www.cnblogs.com/husky/p/6322741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!