Commons-math rounding double

Ang*_*ata 6 java apache-commons-math

我正在使用commons-math 3.6.1.

我需要将double值舍入为2进制

我们假设这是我的双重值:

double d = 400.54540997260267;
Run Code Online (Sandbox Code Playgroud)

现在通过舍入这个数字,我期待结果 400.54

相反,如果我的数字是双倍的,d1 = 400.54640997260267;我期待结果400.55

现在我正在使用此代码:

Precision.round(d, 2, BigDecimal.ROUND_DOWN);
Run Code Online (Sandbox Code Playgroud)

如果我使用舍入方法,BigDecimal.ROUND_DOWN我总是得到最低的舍入.我应该使用哪种舍入方法才能得到我所掌握的内容?

谢谢Angelo

UPDATE

我没有理解downvoting的原因我尝试了以下代码:

public class TestCalcoli

    {
        private static final Logger logger = LoggerFactory.getLogger(TestCalcoli.class.getName());
        private void calc(double d)
        {
            double result = Precision.round(d, 2, BigDecimal.ROUND_HALF_DOWN);
            double result2 = Precision.round(d, 2, BigDecimal.ROUND_HALF_UP);
            logger.info("d--> "+d+" result --> "+result+" result2 --> "+result2);
        }
        @Test
        public void calcola()
        {
            try
            {
                double d = 400.54540997260267;
                double d1 = 400.54640997260267;
                calc(d1);
                calc(d);
            }
            catch (Exception e)
            {
                logger.error("errore", e);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

控制台输出:

2017-07-31 09:29:44,608 317  [main] INFO  i.e.c.r.pwb.test.TestCalcoli - d--> 400.54640997260265 result --> 400.55 result2 --> 400.55
2017-07-31 09:29:44,612 321  [main] INFO  i.e.c.r.pwb.test.TestCalcoli - d--> 400.54540997260267 result --> 400.55 result2 --> 400.55
Run Code Online (Sandbox Code Playgroud)

所有建议的答案都没有给我我期待的结果,或者有一些我想念的东西或者所有给出的答案都有点太仓促

mil*_*ndt 6

如果要向上舍入相同的距离,即数字5,则应使用HALF_UP.