如何将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}}
我希望它应该与输入相同。因此,请让我知道如何设置完整的输入。
答案 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
。
如果您以后需要对数字进行一些数学运算,那么转换它们。您还可以将它们作为String
和BigDecimal
存储在对象中。
答案 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 a BigDecimal as String with max 2 decimal digits, removing 0 on decimal part