zoukankan      html  css  js  c++  java
  • 浮点数精确表示

     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 }
  • 相关阅读:
    js的基本数据类型有哪些?
    UML 类图
    三种代理模式
    jsp 知识点
    httpServlet
    Qt时间&日期
    Microsoft visual studio C 运行时库 在 xx.exe中检测到一个错误
    C++调用COM之错
    PCL中的bug修改
    Qt使用SQLite
  • 原文地址:https://www.cnblogs.com/husky/p/6322741.html
Copyright © 2011-2022 走看看