java float 高效加减_java Double 进行加减乘除

8731a31b6c853550098db38145cbb69d.png

Double 工具类

package org.fh.util;

import java.io.Serializable;

import java.math.BigDecimal;

import java.math.RoundingMode;

/**

* double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型

* 整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可 以下是摘抄的BigDecimal方法:

*/

/**

* 说明:Double工具类

* from:www.1b23.com

*/

public class DoubleUtil implements Serializable {

private static final long serialVersionUID = -3345205828566485102L;

// 默认除法运算精度

private static final Integer DEF_DIV_SCALE = 2;

/**

* 提供精确的加法运算。

*

* @param value1 被加数

* @param value2 加数

* @return 两个参数的和

*/

public static Double add(Double value1, Double value2) {

BigDecimal b1 = new BigDecimal(Double.toString(value1));

BigDecimal b2 = new BigDecimal(Double.toString(value2));

return b1.add(b2).doubleValue();

}

/**

* 提供精确的减法运算。

*

* @param value1 被减数

* @param value2 减数

* @return 两个参数的差

*/

public static double sub(Double value1, Double value2) {

BigDecimal b1 = new BigDecimal(Double.toString(value1));

BigDecimal b2 = new BigDecimal(Double.toString(value2));

return b1.subtract(b2).doubleValue();

}

/**

* 提供精确的乘法运算。

*

* @param value1 被乘数

* @param value2 乘数

* @return 两个参数的积

*/

public static Double mul(Double value1, Double value2) {

BigDecimal b1 = new BigDecimal(Double.toString(value1));

BigDecimal b2 = new BigDecimal(Double.toString(value2));

return b1.multiply(b2).doubleValue();

}

/**

* 提供(相对)精确的除法运算,当发生除不尽的情况时, 精确到小数点以后10位,以后的数字四舍五入。

*

* @param dividend 被除数

* @param divisor 除数

* @return 两个参数的商

*/

public static Double divide(Double dividend, Double divisor) {

return divide(dividend, divisor, DEF_DIV_SCALE);

}

/**

* 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。

*

* @param dividend 被除数

* @param divisor 除数

* @param scale 表示表示需要精确到小数点以后几位。

* @return 两个参数的商

*/

public static Double divide(Double dividend, Double divisor, Integer scale) {

if (scale < 0) {

throw new IllegalArgumentException("The scale must be a positive integer or zero");

}

BigDecimal b1 = new BigDecimal(Double.toString(dividend));

BigDecimal b2 = new BigDecimal(Double.toString(divisor));

return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();

}

/**

* 提供指定数值的(精确)小数位四舍五入处理。

*

* @param value 需要四舍五入的数字

* @param scale 小数点后保留几位

* @return 四舍五入后的结果

*/

public static double round(double value, int scale) {

if (scale < 0) {

throw new IllegalArgumentException("The scale must be a positive integer or zero");

}

BigDecimal b = new BigDecimal(Double.toString(value));

BigDecimal one = new BigDecimal("1");

return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

摘要&#xff1a; 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型&#xff0c;被广泛应用于 画像系统 &#xff0c; 标签系统。 在一些业务重建中&#xff0c;对数组内容的定义往往包含了多重含义&#xff0c;例如即包含了标签本身&#xff0c…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要&#xff1a; SQL基础有这些操作&#xff08;按照执行顺序来排列&#xff09;&#xff1a; from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

一、ACT_RU_EXECUTION 表(很多初学者迷惑的一张表&#xff0c;以为是流程实例表&#xff0c;其实它叫执行实例表&#xff09;&#xff1a;这个表和act_run_task表&#xff0c;一起控制了用户任务的产生与完成等。 这个表是工作流程的核心表&#xff0c;这个表会体现主干与分支…

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

摘要&#xff1a; MaxCompute(原ODPS&#xff09;的概念 海量数据处理平台&#xff0c;服务于批量结构化数据的存储和计算&#xff0c;提供海量数据仓库的解决方案以及针对大数据的分析建模服务.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节&a…

计算机视觉领域还能耍什么花样?

从移动支付的自动贩卖机到刷脸支付的智能货柜&#xff1b;从亲自到柜台验证到人脸核身远程开卡&#xff1b;从排队买票、排队进门的糟糕旅游体验到提前预约&#xff0c;刷脸入园的智慧旅游&#xff1b;……从计算机视觉应用的产业板块上分析&#xff0c;以视频应用为基础的视频…

MaxCompute MapReduce

摘要&#xff1a; 大数据计算服务(MaxCompute)的功能详解和使用心得 点此查看原文&#xff1a;http://click.aliyun.com/m/41384/ 前言 MapReduce已经有文档&#xff0c;用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。 功能介绍 MapReduce 说起…

Flowable springboot项目自定义中文字体

Flowable springboot项目自定义中文字体 摘要&#xff1a;在flowable框架中&#xff0c;当我们想要集成springboot框架的时候&#xff0c;可能要设置中文字体&#xff0c;flowable6.4之前的版本因为没有可以设置字体的属性&#xff0c;所以我们没法进行中文字体的设置&#xff…

漫画 | Kubernetes带你一帆风顺去远航

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | Google Cloud如果你是一个狂立学习flag却屡屡打脸的懒癌晚期&#xff0c;或者是一个对云计算方面云里雾里&#xff0c;不知所措的好学者&#xff0c;亦或是一位资深行业专家&#xff0c;都欢迎关注【CSDN云计算公众号】&…

Kubernetes与Docker基本概念与常用命令对照

摘要&#xff1a; Docker是众多用户上手入门的基础容器和编排工具&#xff0c;提供了良好的开发者体验。Kubernetes是强大的容器编排平台&#xff0c;功能丰富。它们有很多概念和操作都有类似之处。我们今天会和大家对比基本概念与常用命令&#xff0c;可以方便熟悉Docker的用户…

flowable 设置流程跟踪高亮线的颜色

背景&#xff1a;在实际情况下&#xff0c;很多人对这个红色的高亮有意见&#xff0c;所以这里我把我的修改颜色的代码分享出来&#xff0c;希望对大家有帮助。&#xff08;如果有问题可以加QQ群&#xff1a;633168411 里面很多高手&#xff0c;人也都非常善良&#xff09; 效果…

连续启动 crash 自修复技术实现与原理解析

摘要&#xff1a; 如果 app 连续 crash 两次无法启动&#xff0c;用户往往会选择卸载。本文介绍如何该类 crash 的自修复技术。 点此查看原文&#xff1a;http://click.aliyun.com/m/41487/ 作者&#xff1a;阿里云-移动云-大前端团队 前言 如果 app 连续 crash 两次无法启动…

舞动的桥 阿里云首个百万IOPS云盘的背后

摘要&#xff1a; 近日&#xff0c;阿里云推出了首个百万IOPS的ESSD云盘服务&#xff0c;性能上有50倍的飞跃&#xff0c;同时还具备超高吞吐、超低时延等特性&#xff0c;在真实业务场景中&#xff0c;PostgreSQL数据库的写入速度快了26倍。 如此超高的性能&#xff0c;有人会…

Kubernetes上的服务网格 Istio - 分布式追踪篇

摘要&#xff1a; 2017年5月&#xff0c;Google、IBM和Lyft发布了开源服务网格框架Istio&#xff0c;提供微服务的连接、管理、监控和安全保护。Istio提供了一个服务间通信的基础设施层&#xff0c;解耦了应用逻辑和服务访问中版本管理、安全防护、故障转移、监控遥测等切面的问…

flowable实现流程回退功能

此版本为旧的版本&#xff0c;建议参看新的版本6.4.0 前期项目要求实现流程回退&#xff08;仅要求回退到上一节点&#xff09;&#xff0c;所使用的flowable版本是6.2.0-SANPSHOT。在网上收到的流程回退的例子都是activity的&#xff0c;然而activity的很多接口在flowable中都…

如何用ACM简化你的Spring Cloud微服务环境配置管理

摘要&#xff1a; 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例&#xff0c;帮助你理解基于ACM来简化微服务环境配置管理的方案&#xff0c;并会简单比较一下ACM与Spring Cloud Config方案的优…

flowable 新的驳回方式 ChangeActivityStateBuilder 多实例驳回 并行网关驳回 普通节点驳回

6.4.0 新增加了驳回的方式&#xff0c;真是对中国式流程的一种福音呀&#xff0c;感谢flowable创始人。 再也不为开发驳回流程发愁了&#xff0c;网上那些视频和修改源码真的是demo级别的&#xff0c;不能商业用。 只有心如流水的学习才是永远的发电机&#xff0c;不要幻想别…

解锁新姿势 |如何利用配置中心规范构建PaaS服务配置

摘要&#xff1a; 在上一篇文章中&#xff0c;我们以MQ和ACM为例&#xff0c;讨论了如何借助配置中心对消息进行限流管理的场景。在本文中&#xff0c;我们继续以该场景为例&#xff0c;讲述如何以规范的配置命名格式来进行限流设置。 点此查看原文&#xff1a;http://click.al…

flowable流程实例笔记(1)

RuntimeService 运行服务类 支持启动的方式 流程定义: 从这里获取资源文件. 执行实例: 流程实例中执行的每个环节.流程实例: 一个流程实例包括所有运行的节点,一个流程中流程实例只有一个.启动一个实例: public void startProcessInstanceByKey() {String processDefinitionK…

flowable6.4.2流程审批后涉及到的表

当流程全部走完后&#xff0c;act_ru_*表的数据清空了&#xff0c;全部移到了act_hi_*表