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
值,请避免使用 float
或 double
对其进行初始化。 从文本到浮点类型的转换 根据定义不能保证精确。从这种类型到 BigDecimal
的转换是精确的,但可能不会完全产生您期望的结果。
如果可以避免使用 double
或 float
进行初始化,则改为执行以下操作:
BigDecimal d = new BigDecimal("0.0000001");
这已经为您提供了所需的输出,因为从(十进制)文本到 BigDecimal
的转换是精确的。
但是如果你真的必须从double
转换,那么试试:
double d = 0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.stripTrailingZeros().toPlainString());
这将去除(删除)任何尾随零。
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
值,请避免使用 float
或 double
对其进行初始化。 从文本到浮点类型的转换 根据定义不能保证精确。从这种类型到 BigDecimal
的转换是精确的,但可能不会完全产生您期望的结果。
如果可以避免使用 double
或 float
进行初始化,则改为执行以下操作:
BigDecimal d = new BigDecimal("0.0000001");
这已经为您提供了所需的输出,因为从(十进制)文本到 BigDecimal
的转换是精确的。
但是如果你真的必须从double
转换,那么试试:
double d = 0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.stripTrailingZeros().toPlainString());
这将去除(删除)任何尾随零。