package com.mvc.utils;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* ArithUtil
*
* @author smallk
* @date 2018/7/29 22:08
*/
public class ArithUtil {
/**
* 将Object转换为BigDecimal
*/
public static BigDecimal toBigDecimal(Object obj) {
if (obj == null) {
throw new NullPointerException("Parameter is null");
}
if (obj instanceof BigDecimal) {
return (BigDecimal) obj;
}
if (obj instanceof BigInteger) {
return new BigDecimal((BigInteger) obj);
}
if (obj instanceof Float) {
return new BigDecimal((Float) obj);
}
if (obj instanceof Double) {
return new BigDecimal((Double) obj);
}
if (obj instanceof Byte) {
return new BigDecimal((Byte) obj);
}
if (obj instanceof Short) {
return new BigDecimal((Short) obj);
}
if (obj instanceof Integer) {
return new BigDecimal((Integer) obj);
}
if (obj instanceof Long) {
return new BigDecimal((Long) obj);
}
if (obj instanceof String) {
return new BigDecimal((String) obj);
}
throw new RuntimeException("Unknown type of parameter");
}
/**
* add 正常计算
*/
public static BigDecimal add(Object o1, Object o2) {
return toBigDecimal(o1).add(toBigDecimal(o2));
}
/**
* add 四舍五入
*/
public static BigDecimal addRounding(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
BigDecimal db = toBigDecimal(o1).add(toBigDecimal(o2));
return db.setScale(scale, BigDecimal.ROUND_HALF_UP);
}
/**
* add 截断
*/
public static BigDecimal addTrunc(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
BigDecimal db = toBigDecimal(o1).add(toBigDecimal(o2));
return db.setScale(scale, BigDecimal.ROUND_DOWN);
}
/**
* subtract 正常计算
*/
public static BigDecimal sub(Object o1, Object o2) {
return toBigDecimal(o1).subtract(toBigDecimal(o2));
}
/**
* subtract 四舍五入
*/
public static BigDecimal subRounding(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
BigDecimal db = toBigDecimal(o1).subtract(toBigDecimal(o2));
return db.setScale(scale, BigDecimal.ROUND_HALF_UP);
}
/**
* subtract 截断
*/
public static BigDecimal subTrunc(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
BigDecimal db = toBigDecimal(o1).subtract(toBigDecimal(o2));
return db.setScale(scale, BigDecimal.ROUND_DOWN);
}
/**
* multiply 正常计算
*/
public static BigDecimal mul(Object o1, Object o2) {
return toBigDecimal(o1).multiply(toBigDecimal(o2));
}
/**
* multiply 四舍五入
*/
public static BigDecimal mulRounding(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
BigDecimal db = toBigDecimal(o1).multiply(toBigDecimal(o2));
return db.setScale(scale, BigDecimal.ROUND_HALF_UP);
}
/**
* multiply 截断
*/
public static BigDecimal mulTrunc(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
BigDecimal db = toBigDecimal(o1).multiply(toBigDecimal(o2));
return db.setScale(scale, BigDecimal.ROUND_DOWN);
}
/**
* divide 四舍五入
*/
public static BigDecimal divRounding(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
return toBigDecimal(o1).divide(toBigDecimal(o2), scale, BigDecimal.ROUND_HALF_UP);
}
/**
* divide 截断
*/
public static BigDecimal divTrunc(Object o1, Object o2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
return toBigDecimal(o1).divide(toBigDecimal(o2), scale, BigDecimal.ROUND_DOWN);
}
/**
* 保留小数点,四舍五入
*/
public static BigDecimal toRounding(Object obj, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
return toBigDecimal(obj).setScale(scale, BigDecimal.ROUND_HALF_UP);
}
/**
* 保留小数点,截断
*/
public static BigDecimal toTrunc(Object obj, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("Passed an invalid or incorrect argument");
}
return toBigDecimal(obj).setScale(scale, BigDecimal.ROUND_DOWN);
}
}
BigDecimal工具封装
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- RxTools 工欲善其事必先利其器! Android开发过程经常需要用到各式各样的工具类,虽然大部分只需谷歌/百...
- 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线数据。下面交大家一步步...
- 在利用ultra librarian reader生成cadence封装的时候,估计大家总会发现封装会有引脚缺失。...