这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
这里便于大家直接拿取我先将方法给出来,有兴趣的可以看看后面的内容哦!
/**
* 有效舞技 BigDecimal divide
* @param test
*/
private static void m5(double test){
//有效方法
String currentLat2 = String.valueOf(test);
BigDecimal b = new BigDecimal(currentLat2);
b = b.divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(b);
}
复制代码
关于四舍五入 Java 源码中有一个注解:
以上的意思就是:我们小时候就学会四舍五入哦!!
故事的开始
由于在实际的业务上,我这边使用的也是少,so
百度之后发现,网上好多好多呀!
let me try!!!(真的平时使用这个不多,所以我只能测试了,那就列举自己想要的结果)
测试用例:
public static void main(String[] args) {
double test = 3.1456;
double test1 = 3;
double test2 = 3.001;
double test3 = 3.005;
ArrayList<Double> objects = new ArrayList<>();
objects.add(test); objects.add(test1); objects.add(test2); objects.add(test3);
System.out.println("############# 有效方法 m5 #############");
objects.forEach(MathLearn::m5);
System.out.println("############# m1 #############");
objects.forEach(MathLearn::m1);
System.out.println("############## m2 ############");
objects.forEach(MathLearn::m2);
System.out.println("############### m3 ###########");
objects.forEach(MathLearn::m3);
System.out.println("############## m4 ###########");
objects.forEach(MathLearn::m4);
}
复制代码
对应的方法
/**
* 字符串操作
* @param test
*/
private static void m1(double test){
System.out.printf("%.2f",test);
String s1 = String.format("%.2f", test);
System.out.println(s1);
}
/**
* BigDecimal setScale 方法 (这个也是最误导人的方法,测试用例中 3.001 3.005 3.004 会存在问题)
* @param test
*/
private static void m2(double test){
BigDecimal bigDecimal = new BigDecimal(test).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bigDecimal);
}
/**
* 呃 乘除
* @param test
*/
private static void m3(double test){
double round = Math.round(test*100)/100.0;
System.out.println(round);
}
/**
* Decimal 格式化 3.001 3.005 3.004 会存在问题
* @param test
*/
private static void m4(double test){
DecimalFormat df = new DecimalFormat("#.##");
String format = df.format(test);
System.out.println(format);
}
/**
* 有效舞技 BigDecimal divide
* @param test
*/
private static void m5(double test){
//有效方法
String currentLat2 = String.valueOf(test);
BigDecimal b = new BigDecimal(currentLat2);
b = b.divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(b);
}
复制代码
测试结果:
哇,网上百度之后 95%以上的方法都是错的,这果然是坑太多了呀!!!! 有效舞技 中使用的其实就是 ## BigDecimal 的除法然后后面可以设置请求返回的数据格式以及取值规则
END
真的通过这件事,真心发现国内的一些资源真是,坑不少呀,大家发帖的话请不要随意复制粘贴啦,测试一下咯,对于实际业务中如果存在财务计算的小伙伴注意啦。