BigDecimal()省略前导零

时间:2015-10-18 08:27:43

标签: java bigdecimal

如何将BigDecimal()存储为与输入相同?

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

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

但是在打印时,它会打印格式化。像这样:

{{1}}

我希望它应该与输入相同。因此,请让我知道如何设置完整的输入。

4 个答案:

答案 0 :(得分:2)

以下代码应解决您的问题,保持您的字符串不变并仅在比较时将其转换为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 :(得分:1)

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

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

答案 2 :(得分: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; }
}

答案 3 :(得分:0)

有很多方法可以解决这个问题:

1-您可以创建一个包含2个变量的小优雅对象,BigDecimal和一个字符串,其构造函数将输入作为字符串,将其存储在字符串中并解析它并将其存储在BigDecimal中。

2-您可以为每个输入配置BigDecimal输出格式:

Format of BigDecimal number

Format a BigDecimal as String with max 2 decimal digits, removing 0 on decimal part