【发布时间】:2017-07-31 07:18:05
【问题描述】:
我正在使用 commons-math 3.6.1。
我需要将一个双精度值四舍五入到小数点后 2 位
假设这是我的双重价值:
double d = 400.54540997260267;
现在通过四舍五入我期望的结果400.54
相反,如果我的号码是 d1 = 400.54640997260267; 的两倍,我期待的结果是 400.55
现在我正在使用这个代码:
Precision.round(d, 2, BigDecimal.ROUND_DOWN);
如果我使用 as roundingMethod BigDecimal.ROUND_DOWN 我总是得到最低的舍入。我应该使用哪种舍入方法来得到我期望的结果?
我尝试了以下代码:
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);
}
}
}
控制台输出:
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
【问题讨论】:
-
提供你的代码肯定有帮助,但最好是作为一个简单的控制台应用程序,使用
main方法使其琐碎运行(无需进行测试环境启动并运行) - 并在每个测试用例中包含实际结果与预期结果。