小技巧之保留小数点后2位四舍五入

小技巧
placeholder image
admin 发布于:2023-04-16 17:47:26
阅读:loading

最近一段时间属实不知道应该学点啥,写点啥,许多的技术都是知道(略懂)而已,但是懒得花时间投入去深挖,依据个人的性格一项技术挖透得耗费非常非常多的时间,虽然有足够的耐心,但目前真的是有些动力不足,学点啥都不想学,但是又常感叹于不能不去学点啥,所以在不知道学点啥之际翻到了我的浏览器收藏夹,翻了许多后翻到了用Java怎么做“https://howtodoinjava.com/”这个网址,记不得啥时候收藏了,看了一部分Java基础的内容,有一些文章看起来还是值得积累收藏的,所以在参考这些文章的同时,也站在些个人理解的层度,围绕相关技术知识点来普及一下个人的了解。

回到正题,本文将以4种方式来实现格式化保留小数点后2位,并且四舍五入的实现,主要是BigDecimal、Commons Math3、JDK Math、DecimalFormat的几种实现方式,参考代码如下:

package cn.chendd.tips.examples.howtodoinjava.roundoff;

import org.apache.commons.math3.util.Precision;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * 四舍五入 验证
 *
 * @author chendd
 * @date 2023/4/16 18:10
 */
@RunWith(JUnit4.class)
public class RoundOffTest {

    private final Double value = 12345.56789;

    @Test
    public void bigDecimal() {
        BigDecimal result = new BigDecimal(this.value).setScale(2 , RoundingMode.HALF_UP);
        Assert.assertEquals(result.toString() , "12345.57");
    }

    @Test
    public void commonsMath() {
        double result = Precision.round(this.value, 2, RoundingMode.HALF_UP.ordinal());
        Assert.assertEquals(Double.toString(result), "12345.57");
    }

    @Test
    public void jdkMath() {
        double scale = Math.pow(10, 2);
        double result = Math.round(this.value * scale) / scale;
        Assert.assertEquals(Double.toString(result), "12345.57");
    }

    @Test
    public void decimalFormat() {
        DecimalFormat format = new DecimalFormat("###.##");
        String result = format.format(this.value);
        Assert.assertEquals(result, "12345.57");
    }

}

几种方式都比较简单,至于什么场景下去使用格式化多少位等可自行衡量,源码项目工程可见:“源码下载.zip”。

 点赞


 发表评论

当前回复:作者

 评论列表


留言区