zoukankan      html  css  js  c++  java
  • 浮点型丢失精度解决办法

    1、浮点型Float  Double 在计算过程中 精度会在一定程度上丢失 为了解决精度丢失的问题 JDK 给我们提供解决方案 利用String、BigDecimal作为中介

    丢失原因:计算机只能识别二进制,浮点数参与运算,首先会转换为二进制,再参与运算;在转换的过程中发生了数据丢失(至于具体原因这里不做详细阐述);

    2、两个数相加Add

    1 public static double add(double d1, double d2) {
    2         BigDecimal b1 = new BigDecimal(Double.toString(d1));
    3         BigDecimal b2 = new BigDecimal(Double.toString(d2));
    4         return b1.add(b2).doubleValue();
    5     }

    3、两个数减法Sub:

    1 public static double sub(double d1, double d2) {
    2         BigDecimal b1 = new BigDecimal(Double.toString(d1));
    3         BigDecimal b2 = new BigDecimal(Double.toString(d2));
    4         return b1.subtract(b2).doubleValue();
    5     }

    4、两个数除法Div:

     1 /**
     2      * 
     3      * @param d1   被除数
     4      * @param d2    除数
     5      * @param scale 保留小数位数
     6      * @return
     7      */
     8     public static double div(double d1, double d2, int scale) {
     9         if (scale < 0) {
    10             throw new IllegalArgumentException("The scale must be a positive integer or zero");
    11         }
    12         BigDecimal b1 = new BigDecimal(Double.toString(d1));
    13         BigDecimal b2 = new BigDecimal(Double.toString(d2));
    14         return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    15     }

    5、有人将上述方法封装为Arith类,引入包,可以直接静态调用。

  • 相关阅读:
    异步编程:利用委托实现的.NET历史上第一个异步编程模型
    C#:委托
    C#:方法参数之--扩展方法
    py实现ftp
    sftp接口机上传脚本
    通过telnet自动下载cfg配置文件
    下载bat脚本
    solairs11与solairs10 ftp服务的区别
    windows中ftp下载脚本(bat+vb)
    windows2008r2防火墙设置一例
  • 原文地址:https://www.cnblogs.com/QQ931697811/p/4939481.html
Copyright © 2011-2022 走看看