【发布时间】:2013-09-21 20:33:13
【问题描述】:
如何在 Java 中正确截断双精度数,例如 1.99999999999999999 总是被截断为 1,而不是像下面的示例中那样四舍五入为 2。
double d1 = 1.999999999999999999;
double d2 = 1.0;
long i1 = (long)Math.floor(d1);
long i2 = (long)Math.floor(d2);
System.out.println("i1="+i1 + " i2="+i2); //i1 == 2
在此处运行示例:http://www.browxy.com/SubmittedCode/42603
解决方案
使用具有任意精度的BigDecimal
BigDecimal bd = new BigDecimal("0.9999999999999999999999999999");
bd = bd.setScale(0, BigDecimal.ROUND_DOWN); //truncate
【问题讨论】:
-
您需要
BigDecimal来获取此类数字。