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类型的精确计算的更多相关文章

  1. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  2. 关于java中Double类型的运算精度问题

    标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...

  3. java的double类型如何精确到一位小数?

    java的double类型如何精确到一位小数? //分钟转小时vacationNum = (double)Math.round(vacationNum/60*10)/10.0;overTimeNum ...

  4. Java中Double类型计算问题

    public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);  ...

  5. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  6. Java 大数值类型执行精确计算

    简介 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 java.math 包下两个很有用的类:BigInteger 和 BigDecimal.这两个类可以处理包含任意长度数字序列的数值,Big ...

  7. JAVA中double类型运算结果异常的解决

    问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); ...

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

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

  9. 如何使java中double类型不以科学计数法表示

    在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:DecimalFormat a = new Decimal ...

随机推荐

  1. 【loj6142】「2017 山东三轮集训 Day6」A 结论题+Lucas定理

    题解: 当奇数 发现答案就是C(n,1)^2+C(n,3)^2+...C(n,n)^2 倒序相加,发现就是C(2n,n) 所以答案就是C(2n,n)/2 当偶数 好像并不会证 打表出来可以得到 2.当 ...

  2. [转]Xshell在按delete,backspace键产生乱码(不可用)的解决方法

    Xshell在按delete,backspace键产生乱码的解决方法 当我们用Xshell登录进入linux后,在普通模式下,对输入进行删除等操作没有问题. 而在运行中,按delete,backspa ...

  3. Loadrunner和JMeter并发对比

    今天在项目中测试发现,其实LR才是实际意义上的并发测试,JMeter不算并发 记录用户登录日志: LR脚本: 1.登录操作放在init初始化中,用5个虚拟用户并发测试:

  4. PHPcurl的post/get请求

    post/get请求 function getCurl($url,$data=null,$method='post',$https=true){ //1. 初始化 $ch = curl_init(); ...

  5. 总结几种清除浏览器的缓存,适用于明明已经修改bug,但是测试人员说问题还存在的情况下

    1.meta方法<METAHTTP-EQUIV="pragma"CONTENT="no-cache"><METAHTTP-EQUIV=&quo ...

  6. Mybatis下collections使用pageHelper进行分页

    pageHelper在对mybatis一对多分页时造成查询总页数结果不对的情况. 可以做出如下修改: service层: public CommonResult worksList(String us ...

  7. centos6.9安装mysql5.7.18

    详细记录在CentOS 6.9上安装MySQL 5.7.18 过程,希望对大家有所帮助. 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysq ...

  8. 2017-2018-1 20179202《Linux内核原理与分析》第三周作业

    一.mykernel 实验 : 1.深度理解函数调用堆栈: 上周已经一步步地分析过含有变量的函数调用时堆栈的变化,现在对堆栈框架进行一些补充,以以下程序为例: int main() { ... g(x ...

  9. gradle修改apk包名和apk文件名

    需求1:根据渠道不同给包名添加不同的后缀名 方案: //先定义默认包名,用来复用 def packageName = "xxx.xxxx.xxxx" defaultConfig { ...

  10. Linux学习笔记8

    其他常用命令 cd+回车=回车~ 进入当前用户主目录 查看指定进程信息 #ps -ef |grep  进程名 #ps  ---查看属于自己的进程 #ps -aux  查看所有用户的执行进程 换成  p ...