java double 乘_java Double 进行加减乘除
double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型
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();
}
}
java double 乘_java Double 进行加减乘除相关推荐
- java double用法_Java Double doubleToLongBits()用法及代码示例
Java Double类的java.lang.Double.doubleToLongBits()方法是Java中的内置函数,该函数根据IEEE 754浮点"double format&quo ...
- java double方法_Java Double类compare()方法与示例
java double方法 双类compare()方法 (Double class compare() method) compare() method is available in java.la ...
- java double空值_Java Double NullPointerException
问题描述 重构计量项目后台,运行单元测试时,遇到了错误. 第145行: 又没有在null上调方法,两个Double相乘,怎么会空指针呢? 尝试 打开IDEA新建一个普通的Java项目. double ...
- java double 后缀_Java double数据类型
double数据类型使用64位来存储浮点数.double值也称为双精度浮点数. 它可以表示一个最小为4.9 x 10^-324,最大为1.7 x 10^308的数字.它可以是正的或负的. 所有实数被称 ...
- java double 常量_Java Double类,Double类的常用常量介绍
下面的文章内容主要会给大家介绍Double类的常用常量方面的知识,那么你知道Double类的常用常量都有哪些吗?一起通过文章内容来进行了解吧. 在Double类当中,包含了很多的常量,在这些常量当中, ...
- java divide 用法_java中BigDecimal加减乘除基本用法
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数. 在实际应用中,需要对更大或者更小的数进 ...
- double java 精度丢失_java中double和float精度丢失问题及解决方法
在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...
- java math 类_Java Math类静态长轮(double d)示例
java math 类 数学课静态长回合(双D) (Math Class static long round(double d) ) This method is available in java. ...
- java math 类_Java Math类静态双层(double d)示例
java math 类 数学班静态双层(双D) (Math Class static double floor(double d)) This method is available in java. ...
最新文章
- R语言ggplot2可视化增加坐标轴的刻度数实战:自定义坐标轴刻度粒度、增加坐标轴刻度的粒度、更加精细地表达
- Java 微信公众号导出所有粉丝(openId)
- Ubuntu中zabbix 4.2.6监控postgresql数据库
- eclipse修改xml文件默认的打开方式为XML Editor
- vs生成解决方案默认路径_交换网络防环协议——STP生成树,太阁实验栈
- GAN造图MINST手写数字
- 地震设计反应谱、时程分析法和地震动选取与调整
- 密码学术语中英文对照(持续更新中)
- C#基于FFmpeg实现录屏功能
- 你也认为技术总监应懂技术细节,那就有些可悲了
- 如何用 React 完成图片上传功能
- 在上海创业的日子之了解银行企业对公基础账户收费情况
- 面试大厂,你需要掌握这些面试技巧
- iOS App “去评分” 功能的几种实现总结
- 2019软件测试学习教程(学习路线+课程大纲+视频教程+学习工具)
- 音视频开发之旅(36) -FFmpeg +OpenSL ES实现音频解码和播放
- oracle 自动异地备份,实现Oracle异地数据自动备份方案 | 学步园
- 1-13 格式化输出
- 区块链创新之路,该何去何从?
- 程序员持续记录开始赚钱之旅 (第一篇)
热门文章
- 【算法】约瑟夫环原理及其公式
- QT QTextEdit 失去焦点之后取消选中态
- 关于vs2022 C6031 “scanf返回值被忽略”的解决办法
- split()函数介绍
- H3C ER3100路由器由于FAST路由器的ARP欺骗导致的断网的处理方法
- Jupyter notebook 不自动弹出网页
- 定时弹出网页怎么设置?
- Axure RP9 赶鸭子上架级入门指南
- The request was rejected because the URL contained a potentially malicious String ;报错解决
- Edge浏览器插件WeTab免费体验ChatGPT