2015-07-21 70 views
1

我想排序BigDecimal数字。这里是代码。在运行后格式化bigdecimal数字

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int t = scan.nextInt(); 
    List<BigDecimal> hs = new ArrayList<BigDecimal>(); 

    for (int i = 0; i < t; i++) { 
     BigDecimal b = scan.nextBigDecimal(); 
     hs.add(b); 
    } 
    Collections.sort(hs, Collections.reverseOrder()); 
    for (int i = 0; i < hs.size(); i++) { 
     System.out.println(hs.get(i)); 
    } 
} 

它工作正常,但是当我给这样的输入。

5 
50 
.325 
.324 
-5 
100 

输出:

100 
50 
0.325 
0.324 
-5 

我不能赶上为什么这是.325转换为0.325,我怎么能删除吗?

+0

的排序正确显示从最大到最小。您的问题是格式问题还是还有其他问题? –

+4

'.325'在数学上与'0.325'相同。你的问题是关于输出的格式,还是你期望有不同的顺序?如果是这样 - 什么? – Mureinik

+0

编写0.325的方法有很多 - 你认为.325与0.325差别很大吗? – laune

回答

1

你或许应该用DecimalFormat的@rgettman的解决方案来准备,但是这是一个可能替代:

Collections.sort(hs, Collections.reverseOrder()); 
for (int i=0; i < hs.size(); i++) { 
    // conditionally remove a leading zero 
    String value = hs.get(i).toString().replaceFirst("^(-?)0\\.", "$1."); 
    System.out.println(value); 
} 
+0

yes value = value.replaceFirst(“^ 0 \\。”,“。”);这工作正常 – Atul

+0

这有助于谢谢 – Atul

+0

那么-0.325呢?你是否希望这是“-.325”,这只会是一致的,但这不适用于此解决方案。 – laune