Java double 加、减、乘、除
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 加、减、乘、除的更多相关文章
- JAVA日期加减运算
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- java日期加减
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- Java 日期加减
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Test ...
- java日期加减操作
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- Java 日期加减计算.
1.用Java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- java日期加减年月日
/** * 日期相加减 * @param time * 时间字符串 yyyy-MM-dd HH:mm:ss * @param num * 加的数,-num就是减去 * @return * 减去相应的数 ...
- java 精确加减
/** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public double add(double v1, dou ...
- Java-杂项:Float 加减精度问题
ylbtech-Java-杂项:Float 加减精度问题 1.返回顶部 1. java float 加减精度问题在取这个字段的时候转换成BigDecimal就可以了同时,BigDecimal是可以设置 ...
- java将复数字符串虚部实部分离,并实现加减运算
java字符串构造复数 将字符串分解为复数的实部和虚部 定义一个复数类,数据成员有实部和虚部,根据传参不同构造方法重载,并定义复数的加减方法,以及toString方法.有难度的便是用字符串构造复数了, ...
随机推荐
- git 的安装和使用及hithub同步
作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 GitHub远程仓库的地址 https://github.com/ ...
- Ubuntu系统下安装免驱动摄像头
最近想玩一下视频系列的深度学习模型,便网上淘了一个linux下免驱动的摄像头,直接插上usb接口就行,但是一般还不能直接使用,下面将简单说一下如何使用摄像头: 在你的ternimal下输入以下命令: ...
- LINK : fatal error LNK1104: cannot open file .exe' 重开application Experience 服务即可
这是一个坑, , 答案五花八门这个解决了我的痛点. 就这样了.
- 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做项目,新建项目时什么都贪新, ...
- C#获取文件类型
Form1.cs using System;using System.Collections.Generic;using System.ComponentModel;using System.Data ...
- 基于TCP的安卓服务器开发
一.说明 前文介绍了基于安卓客户端的开发,在此基础上,进行少许改动即可开发出一款基于TCP的安卓服务器,理论知识请参见笔者上一篇博文,下面直接实践操作. 二.权限申明 <!--允许应用程序改变网 ...
- idea设置代码块
转:https://blog.csdn.net/boy_Kenny/article/details/55223078?utm_source=blogxgwz4 idea设置代码块 1.代码模板场景介绍 ...
- 剑指Offer 35. 数组中的逆序对 (数组)
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指Offer 21. 栈的压入、弹出序列 (栈)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- IC卡热复位时序
热复位(warm reset):在时钟CLK和电源电压VCC处于激活状态的前提下,IC卡收到复位信号时产生的复位. 冷复位过程之后,如果收到的复位应答信号不满足规定,终端将启动热复位并从IC卡获得复位 ...