Java 有没有办法将格式化的BigDecimal数字分配给BigDecimal?

Java 有没有办法将格式化的BigDecimal数字分配给BigDecimal?,java,number-formatting,bigdecimal,Java,Number Formatting,Bigdecimal,我有一段代码,它有两个大的十进制变量。这两个变量都被发送到方法格式(工作正常),然后打印出来。变量“d”被发送到format方法,然后直接打印而不指定它(因为format方法返回一个字符串)。 问题发生在变量a中,在变量a中,我分配格式化的值(一个字符串),将其转换为bigDecimal,然后存储在变量a中。当我打印a的值时,格式保持不变,但当我打印变量d时,格式不存在。如何分配格式化值而不将其格式丢失给BigDecimal变量 public static void main(String[]

我有一段代码,它有两个大的十进制变量。这两个变量都被发送到方法格式(工作正常),然后打印出来。变量“d”被发送到format方法,然后直接打印而不指定它(因为format方法返回一个字符串)。 问题发生在变量a中,在变量a中,我分配格式化的值(一个字符串),将其转换为bigDecimal,然后存储在变量a中。当我打印a的值时,格式保持不变,但当我打印变量d时,格式不存在。如何分配格式化值而不将其格式丢失给BigDecimal变量

public static void main(String[] args) {
    BigDecimal d = new BigDecimal("0.0005");
    BigDecimal a = new BigDecimal(format(d, 2));

    System.out.println(a); // 0.000500
    System.out.println(format(new BigDecimal("0.00001"), 3)); // 1.000E-5
}

private static String format(BigDecimal x, int scale) {
    NumberFormat formatter = new DecimalFormat("0.0E0");
    formatter.setRoundingMode(RoundingMode.HALF_UP);
    formatter.setMinimumFractionDigits(scale);
    return formatter.format(x);
}
数字(不管是什么类型的-BigDecima、Float、Long)用于存储值(最精确的值),而不是它们的字符串表示形式。您不能“存储格式化值”为数字,并期望它始终以这种方式表示。每次您想要格式化值时,都必须格式化它

所以这里

BigDecimal a = new BigDecimal(format(d, 2));
您只是使用一些格式化的数字(字符串)创建新的BigDecimal。该字符串被解析回数字,就这样


您期望发生的事情类似于说您希望“字符串”按“原样”存储在二进制中,因为这是数字物理存储的方式。不,它仍然是一堆1和0

在这里,我需要问你一个问题,你的预期输出与BigDecimal“d”有关吗?因为在阅读了您的问题之后,您似乎已经格式化了BigDecimal“a”,并且希望BigDecimal“d”具有相同的输出。我希望保留与“System.out.println”(format(new BigDecimal(“0.00001”),3)相同的值;“(忽略值更改)