android - BigDecimal 舍入为 0 或 5

标签 android rounding bigdecimal

我正在修改 Android 中的 BigDecimal 和货币格式,想知道是否可以使用 BigDecimal 执行以下操作:

我想要的:

  64.99 --> 65.00 (Rounded Up)
  64.99 --> 60.00 (Rounded Down)
  65.01 --> 70.00 (Rounded Up)
  65.01 --> 65.00 (Rounded Down)

目前,使用下面的代码,我只能四舍五入为零。例如:

我得到的:

  64.99 --> 70.00 (Rounded Up)
  64.99 --> 60.00 (Rounded Down)
  65.01 --> 70.00 (Rounded Up)
  65.01 --> 60.00 (Rounded Down)

有没有办法使用 BigDecimal 来实现我想要的?

我的代码:

private static void printRoundedValues() {
    NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
    BigDecimal valueUp = new BigDecimal(64.50, new MathContext(1,RoundingMode.UP));
    BigDecimal valueDown = new BigDecimal(64.50, new MathContext(1,RoundingMode.DOWN)); 

    System.out.println("Value Up: " +  currencyFormat.format(valueUp));
    System.out.println("Value Down: " +  currencyFormat.format(valueDown));
}

最佳答案

您可以乘以 2,然后四舍五入到最接近的 10,然后除以 2。这些 BigDecimals 的精度为 2;对于不同比例的 BigDecimals,它可能需要不同。

BigDecimal[] bds = {new BigDecimal("64.99"), new BigDecimal("65.01")};
BigDecimal two = new BigDecimal("2");
MathContext mcUp = new MathContext(2, RoundingMode.UP);
MathContext mcDown = new MathContext(2, RoundingMode.DOWN);
NumberFormat currency = NumberFormat.getCurrencyInstance();
for (BigDecimal bd : bds)
{
    System.out.println("Test: " + bd);
    BigDecimal roundUp5 = bd.multiply(two).round(mcUp).divide(two);
    System.out.println("Round up: " + currency.format(roundUp5));
    BigDecimal roundDown5 = bd.multiply(two).round(mcDown).divide(two);
    System.out.println("Round down: " + currency.format(roundDown5));
}

输出:

Test: 64.99
Round up: $65.00
Round down: $60.00
Test: 65.01
Round up: $70.00
Round down: $65.00

关于android - BigDecimal 舍入为 0 或 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887385/

相关文章:

android - 当前在 Android 上支持使用 html5 音频标签一次播放多个音轨

javascript - JavaScript 将日期时间四舍五入到最后 10 分钟

jquery - 如何在 Jquery 中将浮点值四舍五入到最接近的整数

java - 是什么导致 BigDecimal.divide 出现 "Non-terminating decimal expansion"异常?

java - 将 BigDecimal 舍入到最接近的 5 美分

java - 安装的应用程序中缺少图标?

Android 支持库 23.2 - 抽屉导航和/或工具栏

java - 将 Java 数字转换为 BigDecimal : best way

Android 设备指南/要求

c# - 舍入到偶数 131.575 结果是奇数而不是偶数