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

标签 java number-formatting bigdecimal

我有一段代码有两个 BigDecimal 变量。这两个变量都被发送到方法格式(工作正常)然后打印。变量“d”被发送到格式方法,然后直接打印而不分配它(因为格式方法返回一个字符串)。 问题出现在变量 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。

关于java - 有没有办法将格式化的 BigDecimal 数字分配给 BigDecimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56472069/

相关文章:

Java - 将 BigDecimal 值舍入到 2 个级别,保留 2 位小数

java - 根据键中某些字符串的一部分从 HashMap 中检索键?

java - Memento 和 Command 设计模式有什么区别?

java - 作为 jar 运行时找不到类路径资源

excel - VBA EXCEL - NUMBERFORMAT 不起作用,但 FORMAT FUNCTION 起作用

java - DecimalFormat.parse() 忽略指数

javascript - 结合 Primefaces 密码验证 : <p:password> and show/hide text/password icon together

javascript - 根据国家代码格式化电话号码

java - 如何格式化文本字段内的数学表达式?

java - BigDecimal 根据区域设置渲染小数点?