场景是这样,数据库存的是分单位的数字,比如1元数据库存100分。然后前端展示又是元单位的。所以取出来的时候就要把long类型的数字转成double。
出现0.88 - 0.05 = 0.83000000000....1 这种情况,怎么破?
场景是这样,数据库存的是分单位的数字,比如1元数据库存100分。然后前端展示又是元单位的。所以取出来的时候就要把long类型的数字转成double。
出现0.88 - 0.05 = 0.83000000000....1 这种情况,怎么破?
public class MoneyUtil {
/**
* Translates the String repre sentation of a BigDecimal into a BigDecimal.
*/
private static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
/**
* 分转元
* @param fen 分
* @return 元
*/
public static String fenToYuan(String fen){
// 第二个参数表示精度,就是保留小数点之后多少位;
// 第三个参数表示精确方法,进位和舍位的标志位
BigDecimal divide = new BigDecimal(fen).divide(ONE_HUNDRED, 2, 7);
return divide.toString();
}
/**
* 元转分
* @param yuan 元
* @return 分
*/
public static String yuanToFen(String yuan){
BigDecimal multiply = new BigDecimal(yuan).multiply(ONE_HUNDRED);
return String.valueOf(multiply.intValue());
}
}
15 回答8.4k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
获取数据库存的数字后,使用
BigDecimal
BigDecimal.setScale()方法用于格式化小数点
setScale(1)表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
setScale(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入
setScale(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
setScale(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。