BigDecimal()省略前导零

3

我可以如何将BigDecimal()与输入相同地存储?

我需要使用BigDecimal()存储实数,其中可能包含以下内容:

02.34
0.12
.12
0
000.000

我采用了以下方法:
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
BigDecimal[] amount = new BigDecimal[n];

for(int i=0;i<n;i++) {
    amount[i]=sc.nextBigDecimal();
}

但是在打印时,它会打印格式化的文本。像这样:
2.34
0.12
0.12
0.000
0

我希望这个结果与输入的内容完全相同。因此,请告诉我如何保留输入的信息。

4个回答

5
以下代码应该可以解决您的问题,保留您的字符串并且仅在比较时将其转换为BigDecimal。
 Arrays.sort(s, Collections.reverseOrder(new Comparator<String>() {
        @Override
        public int compare(String a1, String a2) { 
           BigDecimal a = new BigDecimal(a1);
            BigDecimal b = new BigDecimal(a2);
            return a.compareTo(b);

        }
    }));

1

由于输入最初是一个字符串,将其完整保留的唯一方法是将其存储为 String

如果以后需要对数字进行一些数学运算,则可以进行转换。您还可以在对象中同时将它们存储为 StringBigDecimal


1
如果您想保留输入不变,请将其存储为String。这正是专门用于精确存储字符序列的内置类型。
另一方面,BigDecimal具有数字表示形式,没有存储其十进制输入的机制。实际上,您可以初始化BigDecimal而不提供任何十进制表示 - 例如通过一系列算术运算,在这种情况下,初始表示根本不适用。
如果您需要在多个地方执行此操作,请创建一个类。存储原始字符串以及它所代表的BigDecimal。这样,您只需进行一次转换,并保留原始表示:
class OrigBigDecimal {
    private String orig;
    private BigDecimal val;
    public OrigBigDecimal(String s) {
        orig = s;
        val = new BigDecimal(s);
    }
    public String toString() { return s; }
    public BigDecimal getVal() { return val; }
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接