在双变量点之后插入数字(Java)

时间:2019-03-23 21:05:04

标签: java double

我有一个双精度值,例如:

double a = 12.1212123456543234;

我需要检查点后的位数,然后将所有位数从第16位删除。这是我的获取点后数字的代码:

String [] splitter  = String.valueOf(a).split("\\.");

但是,即使该点之后的位数大于15,我也总是得到15位数字,最后一位(第15位)被错误的替换。请帮助我。

1 个答案:

答案 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,以选择所需的舍入。