当前位置:编程学习 > JAVA >>

Java中float类型自动转double类型会有误差

Java中float类型自动转double类型为什么数值会有误差

4.2f float类型·转double类型怎么是4.19呢

Java高手知道是怎么回事不

答案:额。。你楼上和楼主我有份愚见

 

首先:Java无法精确计算小数后面的

比如

 double a = 1.3;

 double b = 1.5;

  System.out.println( a == b);

  你会发现结果是true

  因为java计算的时候已经把小数部分截止掉了

 

 或者说不止Java  应该其他语言也是这样。。 至少我没学过一门语言是能精确判断的

 

关于如何处理小数部分我这边有写过一份代码你参考下

java中小数的处理
public   class   Arith   {  
   
          private   static   final   int   DEF_DIV_SCALE   =   10;  
   
          private   Arith()   {  
   
          }  
   
          /**  
            *   提供精確的加法運算  
            *   @param   args  
            */  
          public   static   double   add(double   v1,   double   v2)   {  
                  BigDecimal   b1   =   new   BigDecimal(Double.toString(v1));  
                  BigDecimal   b2   =   new   BigDecimal(Double.toString(v2));  
                  return   b1.add(b2).doubleValue();  
          }  
   
          /**  
            *   提供了精確的減法運算  
            *    
            *   @param   args  
            */  
          public   static   double   sub(double   v1,   double   v2)   {  
                  BigDecimal   b1   =   new   BigDecimal(Double.toString(v1));  
                  BigDecimal   b2   =   new   BigDecimal(Double.toString(v2));  
                  return   b1.subtract(b2).doubleValue();  
          }  
           
          /**  
            *   提供了精確的乘法運算  
            *   @param   args  
            */  
          public   static   double   mul(double   v1,   double   v2)   {  
                  BigDecimal   b1   =   new   BigDecimal(Double.toString(v1));  
                  BigDecimal   b2   =   new   BigDecimal(Double.toString(v2));  
                  return   b1.multiply(b2).doubleValue();  
          }  
           
          /**  
            *   提供了(相對)精確的除法運算,當發生除不儘的情況時,精確到  
            *   小數點以後110位  
            *   @param   args  
            */  
          public   static   double   div(double   v1,   double   v2)   {  
                  return   div(v1,   v2,   DEF_DIV_SCALE);  
          }  
           
          /**  
            *   提供了(相對)精確的除法運算,當發生除不儘的情況時,由scale參數指定  
            *   精度,以後的數字四捨五入  
            *   @param   args  
            */  
          public   static   double   div(double   v1,   double   v2,   int   scale)   {  
                  if   (scale   <   0)   {  
                          throw   new   IllegalArgumentException(  
                                          "The   scale   must   be   a   positive   integer   or   zero");  
                  }  
     &nb

上一个:java22选5,随机数有答案,需要解释。
下一个:可以帮,提供一些,JAVA初级练习题吗?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,