object DecimalUtil {
/**
* 金钱加法
*/
fun add(v1: String?, v2: String?): String {
val b1 = BigDecimal(v1)
val b2 = BigDecimal(v2)
return b1.add(b2).toString()
}
/**
* 金钱乘法
*/
fun multiply(v1: String?, v2: String?): String {
val b1 = BigDecimal(v1)
val b2 = BigDecimal(v2)
return b1.multiply(b2).toString()
}
/**
* 乘法
*
* @param v1 乘数
* @param v2 被乘数
* @param scale 小数点保留位数
*/
fun multiplyWithScale(v1: String?, v2: String?, scale: Int): String {
val b1 = BigDecimal(v1)
val b2 = BigDecimal(v2)
var result = b1.multiply(b2)
result = result.setScale(scale)
return result.toString()
}
/**
* 金钱除法
*/
fun divide(v1: String?, v2: String?): String {
val b1 = BigDecimal(v1)
val b2 = BigDecimal(v2)
return b1.divide(b2).toString()
}
/**
* 如果除不断,产生无限循环小数,那么就会抛出异常,解决方法就是对小数点后的位数做限制
*
* @param v2 小数模式 ,DOWN,表示直接不做四舍五入,参考[RoundingMode]
*/
fun divideWithRoundingDown(v1: String?, v2: String?): String {
return divideWithRoundingMode(v1, v2, RoundingMode.DOWN)
}
/**
* 选择小数部分处理方式
*/
fun divideWithRoundingMode(v1: String?, v2: String?, roundingMode: RoundingMode?): String {
return divideWithRoundingModeAndScale(v1, v2, RoundingMode.DOWN, 0)
}
/**
* 选择小数点后部分处理方式,以及保留几位小数
*
* @param v1 除数
* @param v2 被除数
* @param roundingMode 小数处理模式
* @param scale 保留几位
*/
fun divideWithRoundingModeAndScale(
v1: String?, v2: String?,
roundingMode: RoundingMode?, scale: Int
): String {
val b1 = BigDecimal(v1)
val b2 = BigDecimal(v2)
return b1.divide(b2, scale, roundingMode).toString()
}
/**
* 金钱减法
*/
fun subtract(v1: String?, v2: String?): String {
val b1 = BigDecimal(v1)
val b2 = BigDecimal(v2)
return b1.subtract(b2).toString()
}
}
/// 使用方法, 例如加法:
var price = "0"
price = DecimalUtil.add(price, price2)
Kotlin BigDecimal价格精度
最新推荐文章于 2024-03-25 19:52:01 发布