java 加倍到 BigDecimal 的转换添加额外的尾随零

java double to BigDecimal convertion adding extra trailing zero

double d =0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.toPlainString());

打印输出 => 0.00000010 我期待 0.0000001

您可以使用 DecimalFormat 来格式化您的 BigDecimal

double d = 0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
DecimalFormat df = new DecimalFormat("#0.0000000");
System.out.println(df.format(d1));

首先,要获得精确的 BigDecimal 值,请避免使用 floatdouble 对其进行初始化。 从文本到浮点类型的转换 根据定义不能保证精确。从这种类型到 BigDecimal 的转换是精确的,但可能不会完全产生您期望的结果。

如果可以避免使用 doublefloat 进行初始化,则改为执行以下操作:

BigDecimal d = new BigDecimal("0.0000001");

这已经为您提供了所需的输出,因为从(十进制)文本到 BigDecimal 的转换是精确的。

但是如果你真的必须double转换,那么试试:

double d = 0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.stripTrailingZeros().toPlainString());

这将去除(删除)任何尾随零。