有效舞技~四舍五入(保留两位小数)

315 阅读2分钟

这是我参与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 源码中有一个注解:

image.png

以上的意思就是:我们小时候就学会四舍五入哦!!

故事的开始

image.png 由于在实际的业务上,我这边使用的也是少,so

image.png 百度之后发现,网上好多好多呀!

image.png 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);
}

测试结果:

image.png 哇,网上百度之后 95%以上的方法都是错的,这果然是坑太多了呀!!!! 有效舞技 中使用的其实就是 ## BigDecimal 的除法然后后面可以设置请求返回的数据格式以及取值规则

image.png

END

真的通过这件事,真心发现国内的一些资源真是,坑不少呀,大家发帖的话请不要随意复制粘贴啦,测试一下咯,对于实际业务中如果存在财务计算的小伙伴注意啦。