如 :19.9-9.9=9.9999999999999,而不是10double相减会转换成二进制,因double有效位数为 16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差

//两个Double数相加

  public static Double add(Double v1,Double v2){

  BigDecimal b1 = new BigDecimal(v1.toString());

  BigDecimal b2 = new BigDecimal(v2.toString());

  return b1.add(b2).doubleValue();

  }

  //两个Double数相减

  public static Double sub(Double v1,Double v2){

  BigDecimal b1 = new BigDecimal(v1.toString());

  BigDecimal b2 = new BigDecimal(v2.toString());

  return b1.subtract(b2).doubleValue();

  }

  // 两个Double数相乘

  public static Double mul(Double v1,Double v2){

  BigDecimal b1 = new BigDecimal(v1.toString());

  BigDecimal b2 = new BigDecimal(v2.toString());

  return b1.multiply(b2).doubleValue();

  }

  //两个Double数相除

  public static Double div(Double v1,Double v2){

  BigDecimal b1 = new BigDecimal(v1.toString());

  BigDecimal b2 = new BigDecimal(v2.toString());

  return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();

  }

  //两个Double数相除,并保留scale位小数

  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");

  }

  BigDecimal b1 = new BigDecimal(v1.toString());

  BigDecimal b2 = new BigDecimal(v2.toString());

  return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

  }

//进行四舍五入

BigDecimal b1 = new BigDecimal(d);
       BigDecimal b2 = new BigDecimal(1);
        // 任何一个数字除以1都是原数字
        // ROUND_HALF_UP是BigDecimal的一个常量,
表示进行四舍五入的操作
        return b1.divide(b2, len,BigDecimal.
ROUND_HALF_UP).doubleValue();

  }

double类型相减有小数误差的更多相关文章

  1. 两个Double类型相减出现精度丢失问题

    两个Double类型相减出现精度丢失问题 720.50-279.5=440.099999999 而不是440.1 解决方法,将数据库中的类型改为decimal类型,小数精确到2位

  2. java double类型保留两位小数4种方法【转】

    4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...

  3. js- float类型相减 出现无限小数的问题

    6.3 -1.1 是不是应该等于5.2? 但是js 会导致得出 5.19999999999的结果 怎么办?可以先先乘100 后相减,然是用方法 舍入为最接近的整数,然后再除于100, Math.rou ...

  4. oracle timestamp转换date及date类型相减

    --timestamp转换为date(ts字段为timestamp类型) ; --timestamp转换为date(ts字段为timestamp类型) ; --date相减 )) FROM dual; ...

  5. java中double类型显示两个小数,比如12.00

    Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如     0,返回“0.00” ...

  6. C#中两个日期类型相减得到天数

    protected int GetDuration(DateTime start, DateTime finish) { return (finish - start).Days; } 直接相减得到的 ...

  7. c# double 类型保留几位小数

    C 或 c :货币 D 或 d:十进制数 E 或 e:科学记数法(指数) F 或 f:定点 G 或 g:常规 N 或 n:数字 P 或 p:百分比 double.ToString("Nx & ...

  8. java double类型保留两位小数4种方法

    http://blog.csdn.net/huaishuming/article/details/17752365 ****************************************** ...

  9. double类型保留2位小数

    double d = 12.2289; java.text.DecimalFormat df = new java.text.DecimalFormat("#.00"); Syst ...

随机推荐

  1. TensorFlow Jupyter Notebook 和matplotlib安装配置

    Jupyter Notebook 和matplotlib Jupyter Notebook安装 Python 3 : python3 -m pip install --upgrade pip pyth ...

  2. apache 二级域名设置完整步骤

    步骤如下: 1. 你要拥有一个有泛域名解析的顶级域名,例如:abc.com 在dns服务上设置,域名服务商都提供此服务 www.abc.com      指向服务器IPabc.com          ...

  3. AWS EC2 使用root账户密码登陆

    创建亚马逊的云主机EC2会提示下载一个pem的文件,需要使用puttygen转换成ppk私钥,转换过程如下图: 然后在使用putty登录,用户名是ec2-user.下面将修改使用root账户登录: 1 ...

  4. xml配置

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name=& ...

  5. .NET Core开发日志——Dapper与MySQL

    Dapper作为.NET生态中广为人知的轻量级ORM类库在.NET Core里仍能被有效利用,并且其不但可以连通SQL Server数据库还提供对其它数据库,比如MySQL的支持.这里试验了一下通过D ...

  6. Steeltoe之Config客户端篇

    Steeltoe是一款开源项目,其目标是选取源自Netflix及其它公司的工具,使它们能够运用于.NET社区.它不仅可以在.NET Core上,也可以在.NET Framework 4.X以上使用.此 ...

  7. GregorianCalendar公里类

    使用GregorianCalendar 获得日期是年中第几周第几天 public class Common { /// <summary> /// 获取日期是年中的第几周 /// < ...

  8. notbook1.1

    1)95年创建java语言 2)1.2版本使java具有了生产能力 3)1.8版本增加 新的API lamda 函数式编程1.9 使之模块化 4)java编程的基本套路 1. 编写源代码2. 编译源程 ...

  9. git add详解

    git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件. git add -u :他仅监控 ...

  10. Vue的自动化测试

    前言 为什么我们需要测试? 让产品可以快速迭代,同时还能保持高质量 -- 阮一峰 持续集成是什么? 对于一些相对稳定的系统级别页面,自动化测试在提高测试的效率的方面起到非常重要的作用.前端的自动化测试 ...