double等大数据精确计算工具类
来源:互联网 发布:上古世纪美女捏脸数据 编辑:程序博客网 时间:2024/05/19 23:03
package com.common.util;/** * double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型 整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可 以下是摘抄的BigDecimal方法: */import java.math.BigDecimal;public class NumberUtil { /** * 提供精确的加法运算。 * * @param value1 被加数 * @param value2 加数 * @return 两个参数的和 */ public static Number add(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(value1.toString()); BigDecimal b2 = new BigDecimal(value2.toString()); return b1.add(b2); } /** * 提供精确的减法运算。 * * @param value1 被减数 * @param value2 减数 * @return 两个参数的差 */ public static Number sub(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(value1.toString()); BigDecimal b2 = new BigDecimal(value2.toString()); return b1.subtract(b2); } /** * 提供精确的乘法运算。 * * @param value1 被乘数 * @param value2 乘数 * @return 两个参数的积 */ public static Number mul(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(value1.toString()); BigDecimal b2 = new BigDecimal(value2.toString()); return b1.multiply(b2); } /** * 提供(相对)精确的除法运算,当发生除不尽的情况时, 精确到小数点以后2位,进行四舍五入。 * * @param dividend 被除数 * @param divisor 除数 * @return 两个参数的商 */ public static Number div(Number dividend, Number divisor) { BigDecimal b1 = new BigDecimal(dividend.toString()); BigDecimal b2 = new BigDecimal(divisor.toString()); return div(b1, b2, 2); } /** * 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。 * * @param dividend 被除数 * @param divisor 除数 * @param scale 表示表示需要精确到小数点以后几位。 * @return 两个参数的商 */ public static Number div(Number dividend, Number divisor, Integer scale) { if (scale < 0) { throw new IllegalArgumentException("The scale must be a positive integer or zero"); } BigDecimal b1 = new BigDecimal(dividend.toString()); BigDecimal b2 = new BigDecimal(divisor.toString()); return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP); } /** * 提供精确的小数位四舍五入处理。 * * @param value 需要四舍五入的数字 * @param scale 小数点后保留几位 * @return 四舍五入后的结果 */ public static Number round(Number value, Integer scale) { if (scale < 0) { throw new IllegalArgumentException("The scale must be a positive integer or zero"); } BigDecimal b = new BigDecimal(value.toString()); return b.setScale(scale, BigDecimal.ROUND_HALF_UP); }}
阅读全文
0 0
- double等大数据精确计算工具类
- double类型的精确计算工具
- double精确计算
- 精确商业计算工具类
- double计算的工具类
- Java精确计算,用BigDecimal来处理int、double、float等之间的计算
- 使用BigDecimal进行精确计算工具类
- 精确计算工具
- Java Double类型计算工具类 BigDecimal
- Java 精确计算-double-float-String
- JAVA中实现double类型精确计算
- 解决double类型不能精确计算问题~
- 精确计算浮点(Double)类型数值
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java中浮点型数据Float和Double进行精确计算的问题
- 精确数据计算
- 123
- java 设计模式之初探代理模式
- android studio external tool
- python01
- hdoj1003(DP)
- double等大数据精确计算工具类
- Java-数组初始化方式
- 出差在外的Intern如何解决x230/x240电脑重置登录密码的问题
- kotlin学习途径
- eclipse中使用spring boot 入门开发(包含:与jsp页面和数据库交互,cmd打包运行war包)
- 每个Android程序员应该知道的Kotlin
- shell下常用语句
- UGUI Canvas与UICamera的设置
- 原型相关的概念