我有一个双精度值,例如:
double a = 12.1212123456543234;
我需要检查点后的位数,然后将所有位数从第16位删除。这是我的获取点后数字的代码:
String [] splitter = String.valueOf(a).split("\\.");
但是,即使该点之后的位数大于15,我也总是得到15位数字,最后一位(第15位)被错误的替换。请帮助我。
答案 0 :(得分:2)
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,以选择所需的舍入。