我有一个双值,例如:
double a = 12.1212123456543234;
我需要检查点后的数字位数,并从第十六位删除所有数字。这是我的代码获取点后的数字:
String [] splitter = String.valueOf(a).split("\\.");
但即使点数之后的数字大于15,我总是得到15位数,最后一位数(第十五位)被错误取代。请帮我。
Double是64位浮点数。并且它的精度限制在该点之后的15-16位数,这就是为什么你得到不正确的结果。
如果想要使用那么大的数字,你可能需要BigDecimal。
BigDecimal decimal = new BigDecimal("12.1212123456543234");
如果要将十进制数字舍入为N位数,可以这样做:
BigDecimal decimal = new BigDecimal("12.1212123456543234");
decimal = decimal.setScale(15, RoundingMode.CEILING);
你还应该看看RoundingModes来选择你需要的舍入。