首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DecimalFormat四舍五入的奇怪结果

DecimalFormat是Java中用于格式化数字的类。它可以将数字按照指定的格式进行格式化,并且支持四舍五入操作。然而,在某些情况下,使用DecimalFormat进行四舍五入可能会得到一些奇怪的结果。

DecimalFormat的四舍五入是基于舍入模式(Rounding Mode)来进行的。舍入模式决定了在进行四舍五入时应该如何处理边界情况。Java中提供了几种舍入模式,包括:

  1. RoundingMode.UP:向远离零的方向舍入,即使是正数也会舍入为较大的整数,负数则舍入为较小的整数。
  2. RoundingMode.DOWN:向接近零的方向舍入,即使是正数也会舍入为较小的整数,负数则舍入为较大的整数。
  3. RoundingMode.CEILING:向正无穷方向舍入,正数舍入为较大的整数,负数舍入为较小的整数。
  4. RoundingMode.FLOOR:向负无穷方向舍入,正数舍入为较小的整数,负数舍入为较大的整数。
  5. RoundingMode.HALF_UP:四舍五入,如果舍弃部分大于等于0.5,则舍入为较大的整数,否则舍入为较小的整数。
  6. RoundingMode.HALF_DOWN:五舍六入,如果舍弃部分大于0.5,则舍入为较大的整数,否则舍入为较小的整数。
  7. RoundingMode.HALF_EVEN:银行家舍入法,如果舍弃部分大于0.5,则舍入为较大的整数,如果舍弃部分等于0.5,则舍入到最近的偶数。

当使用DecimalFormat进行四舍五入时,如果没有指定舍入模式,默认使用的是RoundingMode.HALF_EVEN。这就意味着在某些情况下,舍入结果可能会与我们预期的不同。

为了避免DecimalFormat四舍五入的奇怪结果,我们可以显式地指定舍入模式。例如,如果我们希望始终向上舍入,可以使用RoundingMode.UP。示例代码如下:

代码语言:txt
复制
import java.text.DecimalFormat;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        double number = 3.14159;
        DecimalFormat df = new DecimalFormat("#.##");
        df.setRoundingMode(RoundingMode.UP);
        String result = df.format(number);
        System.out.println(result);
    }
}

在上述代码中,我们将舍入模式设置为RoundingMode.UP,这样无论小数部分是多少,都会向上舍入为较大的整数。输出结果为3.15。

总结:DecimalFormat是Java中用于格式化数字的类,可以进行四舍五入操作。然而,由于默认使用的舍入模式可能导致奇怪的结果,我们可以通过显式指定舍入模式来避免这种情况。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • java取整和java四舍五入方法

    double i=2, j=2.1, k=2.5, m=2.9; System.out.println(“舍掉小数取整:Math.floor(2)=” + (int)Math.floor(i)); System.out.println(“舍掉小数取整:Math.floor(2.1)=” + (int)Math.floor(j)); System.out.println(“舍掉小数取整:Math.floor(2.5)=” + (int)Math.floor(k)); System.out.println(“舍掉小数取整:Math.floor(2.9)=” + (int)Math.floor(m)); /* 这段被注释的代码不能正确的实现四舍五入取整 System.out.println(“四舍五入取整:Math.rint(2)=” + (int)Math.rint(i)); System.out.println(“四舍五入取整:Math.rint(2.1)=” + (int)Math.rint(j)); System.out.println(“四舍五入取整:Math.rint(2.5)=” + (int)Math.rint(k)); System.out.println(“四舍五入取整:Math.rint(2.9)=” + (int)Math.rint(m)); System.out.println(“四舍五入取整:(2)=” + new DecimalFormat(“0”).format(i)); System.out.println(“四舍五入取整:(2.1)=” + new DecimalFormat(“0”).format(i)); System.out.println(“四舍五入取整:(2.5)=” + new DecimalFormat(“0”).format(i)); System.out.println(“四舍五入取整:(2.9)=” + new DecimalFormat(“0”).format(i)); */ System.out.println(“四舍五入取整:(2)=” + new BigDecimal(“2”).setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println(“四舍五入取整:(2.1)=” + new BigDecimal(“2.1”).setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println(“四舍五入取整:(2.5)=” + new BigDecimal(“2.5”).setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println(“四舍五入取整:(2.9)=” + new BigDecimal(“2.9”).setScale(0, BigDecimal.ROUND_HALF_UP));

    01

    java.math.BigDecimal保留两位小数[通俗易懂]

    java保留两位小数问题: 一: 四舍五入(四舍五入形式保留两位小数,注意模式ROUND_HALF_UP) double f = 2345.2345; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 保留两位小数 二: double f = 2345.2345; java.text.DecimalFormat df =new java.text.DecimalFormat(“#.00”); df.format(f); 例:new java.text.DecimalFormat(“#.00”).format(2.1234567) #.00 表示两位小数 #.0000四位小数 以此类推… 三: double d = 2.1234567; String result = String .format(“%.2f”); %.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型 四: NumberFormat ddf1=NumberFormat.getNumberInstance() ; void setMaximumFractionDigits(int digits) digits 显示的数字位数 为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的 import java.text.* ; import java.math.* ; class TT { public static void main(String args[]) { double x=2.1234567; NumberFormat ddf1=NumberFormat.getNumberInstance() ; ddf1.setMaximumFractionDigits(2); String s= ddf1.format(x) ; System.out.print(s); } } 二 、BigDecimal 的加减乘除使用 BigDecimal bignum1 = new BigDecimal(“10”); BigDecimal bignum2 = new BigDecimal(“5”); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.println(“和 是:” + bignum3);

    02
    领券