我有一段代码,其中包含两个BigDecimal变量。这两个变量都发送到方法格式(可以正常工作),然后打印。变量“ d”被发送到format方法,然后直接打印而不分配它(因为method format返回一个字符串)。 问题发生在变量a中,我在其中分配了格式化值(它是String),转换为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);
}
答案 0 :(得分:3)
数字(无论是哪种类型-BigDecima,Float,Long)都将存储值(最准确的值)而不是它们的String表示形式。您不能将格式化的值“存储为数字”,并期望它一直以这种方式表示。每次想要格式化值时,都必须对其进行格式化。
所以在这里
BigDecimal a = new BigDecimal(format(d, 2));
您正在使用一些格式化的数字(字符串)来创建新的BigDecimal。该字符串将被解析回数字,就这样。
您期望发生的事情类似于说您希望“字符串”按“原样”存储在二进制系统中-因为这是物理存储数字的方式。不,它仍然是一堆零。