有没有办法将格式化的 BigDecimal 数字分配给 BigDecimal?
Is there a way to assign a formatted BigDecimal number to a BigDecimal?
我有一段代码有两个 BigDecimal 变量。这两个变量都被发送到方法格式(工作正常)然后打印。变量 "d" 被发送到格式化方法,然后直接打印而不分配它(因为方法格式化 returns 一个字符串)。
问题出现在变量 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)用于存储值(最准确的值)而不是它们的字符串表示形式。您不能 "store formatted value" 作为数字并期望它一直以这种方式表示。每次你想要格式化值,你都必须格式化它。
所以这里
BigDecimal a = new BigDecimal(format(d, 2));
您只是使用一些格式化的字符串数字来创建新的 BigDecimal。该字符串被解析回数字,仅此而已。
您期望发生的事情类似于说您希望 "string" 以二进制系统存储 "as is" - 因为这就是数字的物理存储方式。不,它仍然是一堆 1 和 0。
我有一段代码有两个 BigDecimal 变量。这两个变量都被发送到方法格式(工作正常)然后打印。变量 "d" 被发送到格式化方法,然后直接打印而不分配它(因为方法格式化 returns 一个字符串)。 问题出现在变量 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)用于存储值(最准确的值)而不是它们的字符串表示形式。您不能 "store formatted value" 作为数字并期望它一直以这种方式表示。每次你想要格式化值,你都必须格式化它。
所以这里
BigDecimal a = new BigDecimal(format(d, 2));
您只是使用一些格式化的字符串数字来创建新的 BigDecimal。该字符串被解析回数字,仅此而已。
您期望发生的事情类似于说您希望 "string" 以二进制系统存储 "as is" - 因为这就是数字的物理存储方式。不,它仍然是一堆 1 和 0。