/** * 元转分,确保price保留两位有效数字 * @return */ public static int changeY2F(String amount) { BigDecimal bigDecimal = new BigDecimal(amount).setScale(2); return bigDecimal.multiply(new BigDecimal(100)).intValue(); } /** * 分转元,转换为bigDecimal在toString 保留2位小数 * @return */ public static String changeF2Y(int price) { return BigDecimal.valueOf(Long.valueOf(price)).divide(new BigDecimal(100)).setScale(2).toString(); }
1、setScale(2)方法其实内部默认传了 ROUND_UNNECESSARY,
表示结果是精确的值不需要舍入,如果结果的位数和入参不一致将报错
public BigDecimal setScale(int newScale) { return setScale(newScale, ROUND_UNNECESSARY); }
2、BigDecimal.ROUND_DOWN 直接舍掉多余的部分
BigDecimal b = new BigDecimal("2.4599999").setScale(2, BigDecimal.ROUND_DOWN);// 结果2.45
3、BigDecimal.ROUND_UP 舍弃部分>0就进1
BigDecimal c = new BigDecimal("2.2300001").setScale(2, BigDecimal.ROUND_UP); //结果2.24
4、BigDecimal.ROUND_HALF_UP 舍弃部分>=5 进1
BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP); //结果2.23
5、BigDecimal.ROUND_HALF_DOWN 舍弃部分>5进1
BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);//结果2.22
6、BigDecimal.ROUND_CEILING 类同BigDecimal.ROUND_UP
7、BigDecimal.ROUND_FLOOR 类同BigDecimal.ROUND_DOWN
原文:https://www.cnblogs.com/lht4026/p/14518872.html