BigDecimalUtils BigDecimal加减乘除
2024-08-22 15:06:54
public class BigDecimalUtil { private static int DEF_DIV_SCALE = 10; // 默认精确的小数位 /**
* 提供精确的加法运算。
*
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
} /**
* 提供精确的减法运算。
*
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
} /**
* 提供精确的乘法运算。
*
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
} /**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
*
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
} /**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
} /**
* 提供精确的小数位四舍五入处理。
*
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
}
/**
* 提供精确的小数位处理,去掉保留位数后的数字
*
* @param v 需要处理的数字
* @param scale 小数点后保留几位
* @return 去掉保留位数后的结果
*/
public static double decimal(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
}
}
最新文章
- 利用BI搭建零售业数据信息平台
- [2015.02.02]文本编码转换专家 v2.6
- 分页实体类:PageBean
- git :设置 object-c 的忽略文件
- matlab学习笔记(一)单元数组
- oracle中创建表时添加注释
- (转)\r \r\n \t 的区别
- 【极客学院出品】Cocos2d-X系列课程之九-BOX2D物理引擎
- WebPart设置杂项
- 判断字符串是否为UTF8编码
- C#抽象类与接口的区别
- hdu 5975---Aninteresting game(树状数组)
- 一个比Spring Boot快44倍的Java框架!
- mysql正则表达式无法识别\d
- [2019BUAA软工助教]答黄杉同学
- idea 修改单个项目的 默认编码格式
- Android 视频 教程 源码 电子书 网址
- jq ‘’操作‘’伪元素
- U盘或者移动银盘退出时一直显示占用中问题解决--最粗暴解决方式
- python中的文本操作
热门文章
- spring的AOP个人理解和使用
- hdu5542 The Battle of Chibi【树状数组】【离散化】
- 全面解析Oracle等待事件的分类、发现及优化
- collectionView itemW宽度计算不对
- python re.sub 括号匹配替换匹配到的内容后接数字
- python 定义类 学习2
- 模仿Masonary写一个计算器
- Spark Shuffle调优原理和最佳实践
- [LeetCode] 83. Remove Duplicates from Sorted List_Easy tag: Linked List
- 禁止或强制使用堆分配---《C++必知必会》 条款34