BigDecimal.ROUND_HALF_UP 和 BigDecimal.ROUND_HALF_DOWN的正确用法

前言:

      最近看到项目中有涉及到价格计算的代码,其中有用到BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN,这两种舍入方式我以前很少用,带着诸多疑问,我就去网上找了找对应的资料,发现有很多资料都不是完全正确的,于是就有了这篇博客。

解释:

  • BigDecimal.ROUND_HALF_UP: 保留精度的后一位如果大于等于5,则往前进一位, 否则舍弃(即通常所说的四舍五入)。
  • BigDecimal.ROUND_HALF_DOWN: 保留精度的后一位如果小于等于5,进行舍弃,否则进一位。
示例:
import java.math.BigDecimal;

public class BIgDecimalTest {

    public static void main(String[] args) {
        // 最好用String,否则会出现结果不准确的问题
        BigDecimal bigDecimal = new BigDecimal("3.555");
        // 保留精度的后一位(这里是5)如果大于等于5,则往前进一位, 否则舍弃(即通常所说的四舍五入)
        System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP));
        // 保留精度的后一位(这里是5)如果小于等于5,进行舍弃,否则往进一位
        System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_DOWN));
        System.out.println("------------------");

        BigDecimal bigDecimal2 = new BigDecimal("3.556");
        // 最好用String,否则会出现结果不准确的问题
        // 保留精度的后一位(这里是6)如果大于5,则往前进一位,否则舍弃(即通常所说的四舍五入)
        System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_UP));
        // 保留精度的后一位(这里是6)如果小于等于5,进行舍弃,否则往进一位
        System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_DOWN));
        System.out.println("------------------");
    }
}

结果:

BigDecimal.ROUND_HALF_UP 和 BigDecimal.ROUND_HALF_DOWN的正确用法_第1张图片

你可能感兴趣的:(java,java,开发语言)