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

import org.junit.Test;

import java.math.BigDecimal;
import java.math.MathContext; /**
* @author ceshi
* @Title: BigDecimalUtil
* @ProjectName BigDecimalUtil
* @Description: TODO
* @date 2018/7/2719:30
*/
public class BigDecimalUtil { @Test
public void test(){
System.out.println(add(0.02,0.03));
System.out.println(subtraction(0.05,0.03,2));
System.out.println(multiplication(0.2,0.3));
System.out.println(division(0.02,0.03,2));
System.out.println(divisionRounding(0.5,0));
} /**
* double加法
* @param a
* @param b
* @return
*/
public double add(double a, double b) {
BigDecimal b1=new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.add(b2).doubleValue();
} /**
* double减法
* @param a
* @param b
* @param setPrecision 设置精度
* @return
*/
public static double subtraction(double a, double b,int setPrecision) {
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.subtract(b2,new MathContext(setPrecision)).doubleValue();
} /**
* double乘法 结果保留两位小数
* @param a
* @param b
* @return
*/
public static double multiplication(double a, double b) {
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.multiply(b2).doubleValue();
} /**
* double除法
* @param a
* @param b
* @param accurate 结果保留位数
* @return
*/
public static double division(double a, double b,int accurate) {
if (accurate < 0) {
throw new RuntimeException("精确度必须是正整数或零");
}
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.divide(b2, accurate, BigDecimal.ROUND_HALF_UP).doubleValue();
} /**
* double除法 四舍五入
* @param a
* @param scale accurate 小数点后留几位
* @return
*/
public static double divisionRounding(double a, int scale) {
if (scale < 0) {
throw new RuntimeException("精确度必须是正整数或零");
}
BigDecimal b = new BigDecimal(a);
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
} }

运行结果:

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. NVMe概述

    目前企业SSD市场按照接口协议主要分为SATA SSD,PCIe SSD和NVMe SSD,其中SATA SSD沿用了传统的HDD使用的SATA协议,在企业应用和服务器兼容性上具有优势:而PCIe S ...

  2. python mysql and ORM

    http://www.cnblogs.com/alex3714/articles/5950372.html 9. ORM sqlachemy学习 http://www.cnblogs.com/alex ...

  3. linux 创建sudo账号.md

    内容来源自网络 方案一 root登录 ssh root@server_ip_address 新增用户 adduser username 设置密码 passwd username 输入两次密码 修改帐户 ...

  4. 【leetcode】414. Third Maximum Number

    problem 414. Third Maximum Number solution 思路:用三个变量first, second, third来分别保存第一大.第二大和第三大的数,然后遍历数组. cl ...

  5. 浅谈HTTP和HTTPS的区别

    这篇随笔我们从六个步骤来学习: 1.了解HTTP和HTTPS的基本概念 2.HTTPS诞生的目的 3.HTTP与HTTPS的区别 4.HTTP和HTTPS的工作原理 5.HTTPS的优缺点 6.如何将 ...

  6. 我的代码-models

    # coding: utf-8 # In[1]: import pandas as pdimport numpy as npfrom sklearn import treefrom sklearn.s ...

  7. How to Install Tomcat 8.0.27 on CentOS/RHEL and Ubuntu【转】

    https://tecadmin.net/install-tomcat-8-on-centos-rhel-and-ubuntu/ Apache Tomcat is an opensource web ...

  8. nodejs----初期学习笔记

    //一 回调函数 //require---命令//Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.//例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件 ...

  9. 关于windows下的文件结束符

    在<c++ primer>中有说,在windows中文件结束符为:ctrl+z,在Linux中为:ctrl+D. 但是在while(cin>>s)的语句运行中,需要两次的^Z, ...

  10. PythonStudy——赋值运算符 Assignment operator

    eg: num = 10 num += 1 # 等价于 num = num + 1 => 11 print(num) 特殊操作: 1.链式赋值 a = b = num print(a, b, n ...