一个简单的元转分分转元工具类,是使用了BigDecimal来对金额高精度计算。BigDecimal的介绍这里就不展开了。直接上代码:
AmountUtil.javapackage com.weizhixi.test;
import java.math.BigDecimal;
/**
* 金额工具类
* Created by cxq on 2018/1/4.
*/
public class AmountUtil {
/**
* 分转元(除以100)四舍五入,保留2位小数
* @param amount 金额 元
* @return
*/
public static String changeF2Y(String amount){
return new BigDecimal(amount).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 元转分(乘以100)
* @param amount 金额 分(支持大数字,16位以上)
* @return
*/
public static String changeY2F(String amount){
return new BigDecimal(amount).multiply(new BigDecimal(100)).toString();
}
public static void main(String[] arg){
//普通数值
System.out.println(changeF2Y("101"));
//1.01
System.out.println(changeY2F("101"));
//10100
//超16位以上数值
System.out.println(changeF2Y("34353452345768679845234534343445"));
//343534523457686798452345343434.45
System.out.println(changeY2F("32123134757697845454423534232323"));
//3212313475769784545442353423232300
}
}
multiply(BigDecimal)
BigDecimal对象中的值相乘,返回BigDecimal对象
divide(BigDecimal)
BigDecimal对象中的值相除,返回BigDecimal对象
setScale(scale, BigDecimal.ROUND_HALF_UP)
setScale()方法用于格式化小数点
scale 精度(保留几位小数)
ROUND_HALF_UP 四舍五入
需要使用double,要注意:
1、请使用 BigDecimal.valueOf(amount) 进行转换,不能直接new BigDecimal(amount),这样会出现精度问题。
2、以double入参,以double精度为准。
正确示例:public static String changeF2Y(double amount){
return BigDecimal.valueOf(amount).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
}
原创文章,转载请注明出处:https://www.weizhixi.com/article/49.html