Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 考虑所有数字的四舍五入数字_Java_Rounding - Fatal编程技术网

Java 考虑所有数字的四舍五入数字

Java 考虑所有数字的四舍五入数字,java,rounding,Java,Rounding,在java代码中,我有一个输入:16275.8749999998 我建立了一个方法,将其四舍五入到:16275.87 但正确的答案是:16275.88 我如何用Java解决这个问题 我目前的四舍五入方法: public static double round(final double value, final int places) { if (places < 0) throw new IllegalArgumentException(); BigDecimal bd

在java代码中,我有一个输入:16275.8749999998

我建立了一个方法,将其四舍五入到:16275.87


但正确的答案是:16275.88

我如何用Java解决这个问题

我目前的四舍五入方法:

public static double round(final double value, final int places) {
    if (places < 0) throw new IllegalArgumentException();

    BigDecimal bd = BigDecimal.valueOf(value);
    bd = bd.setScale(places, RoundingMode.HALF_UP);
    return bd.doubleValue();
}
公共静态双循环(最终双精度值,最终整数位){
如果(位置<0)抛出新的IllegalArgumentException();
BigDecimal bd=BigDecimal.valueOf(值);
bd=bd.setScale(位置,舍入模式,向上舍入);
返回bd.doubleValue();
}
<>编辑:我认为“正确答案”有88。因为9s会增加,但我使用的方法不是这样的,肯定会重写它来考虑以前的小数点。
非常感谢大家的回复

Java实际上是在正确地舍入您的数字。由于要四舍五入到2位,因此setScale方法将查看示例中的第三个小数点,即4。由于4小于5,半向上舍入模式的行为类似于向下舍入,这就是为什么输出是16275.87而不是16275.88


为了将数字四舍五入到16275.88,您需要以
round(round(16275.8749999998,3),2)的形式运行您的方法。
Java实际上是正确地将数字四舍五入。由于要四舍五入到2位,因此setScale方法将查看示例中的第三个小数点,即4。由于4小于5,半向上舍入模式的行为类似于向下舍入,这就是为什么输出是16275.87而不是16275.88


为了将数字四舍五入到16275.88,您需要以
四舍五入(round(16275.87499999998,3),2)
的形式运行您的方法。如果您希望始终使用四舍五入模式,则需要使用
四舍五入模式.CEILING
四舍五入模式.up
(取决于您希望负数的行为),而不是
RoundingMode.HALF\u UP

bd=bd.setScale(位置、圆形模式、天花板);
HALF_UP
将舍弃第一位小数点后5位或以上的任何内容,并将舍入该位置小于5的任何内容

天花板
向上
将始终对正数进行四舍五入,因此16275.871将四舍五入为16275.88。两者之间的区别在于它们如何处理负数<代码>上限向正数舍入,
向上
将向较大的负数舍入

CEILING of -16275.871 = -16275.871
UP of -16275.871 = -16275.88

如果您希望始终向上取整,则需要使用
RoundingMode.天花
RoundingMode.up
(取决于您希望负数的行为),而不是
RoundingMode.HALF\u up

bd=bd.setScale(位置、圆形模式、天花板);
HALF_UP
将舍弃第一位小数点后5位或以上的任何内容,并将舍入该位置小于5的任何内容

天花板
向上
将始终对正数进行四舍五入,因此16275.871将四舍五入为16275.88。两者之间的区别在于它们如何处理负数<代码>上限向正数舍入,
向上
将向较大的负数舍入

CEILING of -16275.871 = -16275.871
UP of -16275.871 = -16275.88

... 如果我记得四舍五入正确,如果你四舍五入到第一百位,答案应该是
16275.87
。如果你使用四舍五入模式,四舍五入到
16275.88
正确答案是什么?如果您四舍五入到2位,则
.874xxx
将四舍五入到
.87
而不管
xxx
部分-它在范围的下半部分。”但正确的答案是:16275.88“如果16275.8749999998是不精确的计算结果,并且应该是16275.875,即它被关1,然后使用
BigDecimal
,而不是
double
进行计算。在数学中,当你把一个数字四舍五入时,你要从它的末尾开始。这种方法显然不起作用,我认为它起作用了。我的错是没有检查文件。。。。如果我记得四舍五入正确,如果你四舍五入到第一百位,答案应该是
16275.87
。如果你使用四舍五入模式,四舍五入到
16275.88
正确答案是什么?如果您四舍五入到2位,则
.874xxx
将四舍五入到
.87
而不管
xxx
部分-它在范围的下半部分。”但正确的答案是:16275.88“如果16275.8749999998是不精确的计算结果,并且应该是16275.875,即它被关1,然后使用
BigDecimal
,而不是
double
进行计算。在数学中,当你把一个数字四舍五入时,你要从它的末尾开始。这种方法显然不起作用,我认为它起作用了。我没有检查文件是我的错。