double类型的数值接相加的时候,结果可能出现精度误差
为此Java提供了高精度计算的方法:java.math.*里面提供了BigDecimal类

  1. import org.junit.Test;
  2.  
  3. import java.math.BigDecimal;
  4. import java.math.MathContext;
  5.  
  6. /**
  7. * @author ceshi
  8. * @Title: BigDecimalUtil
  9. * @ProjectName BigDecimalUtil
  10. * @Description: TODO
  11. * @date 2018/7/2719:30
  12. */
  13. public class BigDecimalUtil {
  14.  
  15. @Test
  16. public void test(){
  17. System.out.println(add(0.02,0.03));
  18. System.out.println(subtraction(0.05,0.03,2));
  19. System.out.println(multiplication(0.2,0.3));
  20. System.out.println(division(0.02,0.03,2));
  21. System.out.println(divisionRounding(0.5,0));
  22. }
  23.  
  24. /**
  25. * double加法
  26. * @param a
  27. * @param b
  28. * @return
  29. */
  30. public double add(double a, double b) {
  31. BigDecimal b1=new BigDecimal(a);
  32. BigDecimal b2 = new BigDecimal(b);
  33. return b1.add(b2).doubleValue();
  34. }
  35.  
  36. /**
  37. * double减法
  38. * @param a
  39. * @param b
  40. * @param setPrecision 设置精度
  41. * @return
  42. */
  43. public static double subtraction(double a, double b,int setPrecision) {
  44. BigDecimal b1 = new BigDecimal(a);
  45. BigDecimal b2 = new BigDecimal(b);
  46. return b1.subtract(b2,new MathContext(setPrecision)).doubleValue();
  47. }
  48.  
  49. /**
  50. * double乘法 结果保留两位小数
  51. * @param a
  52. * @param b
  53. * @return
  54. */
  55. public static double multiplication(double a, double b) {
  56. BigDecimal b1 = new BigDecimal(a);
  57. BigDecimal b2 = new BigDecimal(b);
  58. return b1.multiply(b2).doubleValue();
  59. }
  60.  
  61. /**
  62. * double除法
  63. * @param a
  64. * @param b
  65. * @param accurate 结果保留位数
  66. * @return
  67. */
  68. public static double division(double a, double b,int accurate) {
  69. if (accurate < 0) {
  70. throw new RuntimeException("精确度必须是正整数或零");
  71. }
  72. BigDecimal b1 = new BigDecimal(a);
  73. BigDecimal b2 = new BigDecimal(b);
  74. return b1.divide(b2, accurate, BigDecimal.ROUND_HALF_UP).doubleValue();
  75. }
  76.  
  77. /**
  78. * double除法 四舍五入
  79. * @param a
  80. * @param scale accurate 小数点后留几位
  81. * @return
  82. */
  83. public static double divisionRounding(double a, int scale) {
  84. if (scale < 0) {
  85. throw new RuntimeException("精确度必须是正整数或零");
  86. }
  87. BigDecimal b = new BigDecimal(a);
  88. BigDecimal one = new BigDecimal("1");
  89. return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  90. }
  91.  
  92. }

运行结果:

Java double 加、减、乘、除的更多相关文章

  1. JAVA日期加减运算

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date()) ...

  2. java日期加减

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date()) ...

  3. Java 日期加减

    import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Test ...

  4. java日期加减操作

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date()) ...

  5. Java 日期加减计算.

    1.用Java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date()) ...

  6. java日期加减年月日

    /** * 日期相加减 * @param time * 时间字符串 yyyy-MM-dd HH:mm:ss * @param num * 加的数,-num就是减去 * @return * 减去相应的数 ...

  7. java 精确加减

    /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public double add(double v1, dou ...

  8. Java-杂项:Float 加减精度问题

    ylbtech-Java-杂项:Float 加减精度问题 1.返回顶部 1. java float 加减精度问题在取这个字段的时候转换成BigDecimal就可以了同时,BigDecimal是可以设置 ...

  9. java将复数字符串虚部实部分离,并实现加减运算

    java字符串构造复数 将字符串分解为复数的实部和虚部 定义一个复数类,数据成员有实部和虚部,根据传参不同构造方法重载,并定义复数的加减方法,以及toString方法.有难度的便是用字符串构造复数了, ...

随机推荐

  1. git 的安装和使用及hithub同步

    作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 GitHub远程仓库的地址 https://github.com/ ...

  2. Ubuntu系统下安装免驱动摄像头

    最近想玩一下视频系列的深度学习模型,便网上淘了一个linux下免驱动的摄像头,直接插上usb接口就行,但是一般还不能直接使用,下面将简单说一下如何使用摄像头: 在你的ternimal下输入以下命令: ...

  3. LINK : fatal error LNK1104: cannot open file .exe' 重开application Experience 服务即可

    这是一个坑, , 答案五花八门这个解决了我的痛点.  就这样了.

  4. Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules

    原文出处:http://jingwang0523.blog.163.com/blog/static/9090710320113294551497/ 最近在用eclipse做项目,新建项目时什么都贪新, ...

  5. C#获取文件类型

    Form1.cs using System;using System.Collections.Generic;using System.ComponentModel;using System.Data ...

  6. 基于TCP的安卓服务器开发

    一.说明 前文介绍了基于安卓客户端的开发,在此基础上,进行少许改动即可开发出一款基于TCP的安卓服务器,理论知识请参见笔者上一篇博文,下面直接实践操作. 二.权限申明 <!--允许应用程序改变网 ...

  7. idea设置代码块

    转:https://blog.csdn.net/boy_Kenny/article/details/55223078?utm_source=blogxgwz4 idea设置代码块 1.代码模板场景介绍 ...

  8. 剑指Offer 35. 数组中的逆序对 (数组)

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  9. 剑指Offer 21. 栈的压入、弹出序列 (栈)

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  10. IC卡热复位时序

    热复位(warm reset):在时钟CLK和电源电压VCC处于激活状态的前提下,IC卡收到复位信号时产生的复位. 冷复位过程之后,如果收到的复位应答信号不满足规定,终端将启动热复位并从IC卡获得复位 ...