Java中Double类型的精确计算
import java.math.BigDecimal;
public class DoubleUtil { private static final int DEF_DIV_SCALE = 5; // 小数点后的保留位数 /**
* Double精确的加法运算
* @param d1 被加数
* @param d2 加数
* @return 两个参数的和
*/
public static double add( double d1, double d2 ) {
BigDecimal value1 = new BigDecimal( Double.toString(d1) );
BigDecimal value2 = new BigDecimal( Double.toString(d2) );
return value1.add(value2).doubleValue();
} /**
* Double精确的减法运算
* @param d1 被减数
* @param d2 减数
* @return 两个参数的差
*/
public static double sub( double d1, double d2 ) {
BigDecimal value1 = new BigDecimal( Double.toString(d1) );
BigDecimal value2 = new BigDecimal( Double.toString(d2) );
return value1.subtract(value2).doubleValue();
} /**
* Double精确的乘法运算
* @param d1 被乘数
* @param d2 乘数
* @return 两个参数的积
*/
public static Double mul( double d1, double d2 ) {
BigDecimal value1 = new BigDecimal( Double.toString(d1) );
BigDecimal value2 = new BigDecimal( Double.toString(d2) );
return value1.multiply(value2).doubleValue();
} /**
* Double精确的除法运算, 当出现除不尽的情况时, 精确到小数点以后10位, 以后的数字四舍五入
* @param d1 被除数
* @param d2 除数
* @return 两个参数的商
*/
public static double div( double d1, double d2 ) {
return div( d1, d2, DEF_DIV_SCALE );
} /**
* Double精确的除法运算, 当出现除不尽的情况时, 精确到小数点以后10位, 以后的数字四舍五入
* @param d1 被除数
* @param d2 除数
* @param scale 表示需要精确到小数点的后几位
* @return 两个参数的商
*/
public static double div( double d1, double d2, int scale ) {
if ( scale < 0 ) {
throw new IllegalArgumentException( "参数[scale]必须是正整数或者零" );
}
BigDecimal value1 = new BigDecimal( Double.toString(d1) );
BigDecimal value2 = new BigDecimal( Double.toString(d2) );
return value1.divide( value2, scale, BigDecimal.ROUND_HALF_UP ).doubleValue();
} }
Java中Double类型的精确计算的更多相关文章
- Java中double类型的数据精确到小数点后两位
Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- java的double类型如何精确到一位小数?
java的double类型如何精确到一位小数? //分钟转小时vacationNum = (double)Math.round(vacationNum/60*10)/10.0;overTimeNum ...
- Java中Double类型计算问题
public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); ...
- 关于java中Double类型的运算精度问题(转)
Java Java double:浮点数:精确计算 public class Test{ public static void main(String args[]){ Syst ...
- Java 大数值类型执行精确计算
简介 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 java.math 包下两个很有用的类:BigInteger 和 BigDecimal.这两个类可以处理包含任意长度数字序列的数值,Big ...
- JAVA中double类型运算结果异常的解决
问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); ...
- java中double类型显示两个小数,比如12.00
Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如 0,返回“0.00” ...
- 如何使java中double类型不以科学计数法表示
在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:DecimalFormat a = new Decimal ...
随机推荐
- 最小生成树模板【kruskal & prim】
CDOJ 1966 Kruskal 解法 时间复杂度O(mlogm) m为边数,这里主要是边排序占时间,后面并查集还好 #include <cstdio> #include <cst ...
- tomcat配置后台管理监控页面
- python 对象存储///对象序列化
如果你有写数据来之不易,并且希望每次都可以方便的读取,那么存储为一个对象是一个很不错的解决方法 方法一. import pickle #首先要导入包 dics={'a':4,'b':5,'c':6}# ...
- BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
原文链接https://www.cnblogs.com/zhouzhendong/p/9276479.html 题目传送门 - BZOJ3622 题意 给定两个序列 $a,b$ ,各包含 $n$ 个数 ...
- BZOJ1208 [HNOI2004]宠物收养所 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html 题目传送门 - BZOJ1208 题意概括 有两种数,依次加入. 规则为下: 如果当前剩余 ...
- 亲和串 kmp
Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现 ...
- 关系网络数据可视化:3. 案例:公司职员关系图表 & 导演演员关系网络可视化
1. 公司职员关系图表 节点和边界数据 节点是指每个节点本身的数据,代表公司职工的名称:属性(Country).分类(Category)和地区(Region,给每个节点定义的属性数据).文件必须是.c ...
- Chrome 浏览器数据无法同步,google账号登录失败,提示 Request canceled
解决方法: 进账号设置不同步 钱包数据 (即取消"Google Pay 中存储的付款方式和地址信息"项的同步) 参考链接: https://www.v2ex.com/t/45285 ...
- union表关联模糊查询servlet,action方法
2018-11-14 servletxml层 public String getSql(String keyword) { StringBuffer sqlSb = new StringBuffer( ...
- 我今天遇到的条件语句Integer类型的
两个Integer类型的值进行比较时,应该用equals进行判断,用"=="判断是错误的,后来想了一下就明白了,Integer毕竟是对象, 而不是int基本数据类型,可以直接比较, ...