Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 Math RoundingMode.HALF_甚至打印出意外的结果_Java_Math_Rounding - Fatal编程技术网

Java Math RoundingMode.HALF_甚至打印出意外的结果

Java Math RoundingMode.HALF_甚至打印出意外的结果,java,math,rounding,Java,Math,Rounding,我试着调试一个问题,舍入为半舍五入,即使我是java, 正如您在下面看到的,意外的结果是377.35,我们可以预期它打印377.34 有人能解释一下这种行为吗 public static void main(String[] args) { System.out.println((new BigDecimal(0.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString()); //prints 0.34 Sy

我试着调试一个问题,舍入为半舍五入,即使我是java, 正如您在下面看到的,意外的结果是377.35,我们可以预期它打印377.34

有人能解释一下这种行为吗

public static void main(String[] args) {


    System.out.println((new BigDecimal(0.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    //prints 0.34

    System.out.println((new BigDecimal(77.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    //prints 77.34

    System.out.println((new BigDecimal(377.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    **//prints 377.35 ?????**

    //anything larger than 256 is printing .35 
    System.out.println((new BigDecimal(255.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    //prints 255.34 

    System.out.println((new BigDecimal(256.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
    **//prints 256.35 ?????** 


}
仅这一行就失去了
BigDecimal
的所有优点,因为您首先要传递一个
double
,这就完成了所有您不想要的舍入

而是写,

new BigDecimal("377.3450")

…并且通常在任何地方都使用
字符串
构造函数。在得到“正确”答案的情况下,浮点舍入是幸运的,并且方向正确

@JonnyHenly我相信这是同一个问题。谢谢
new BigDecimal("377.3450")