2016-10-10 195 views

回答

3

其實我覺得它更容易去truncateToDouble()toStringAsFixed(),而不是使用NumberFormat都:

n.toStringAsFixed(n.truncateToDouble() == n ? 0 : 2); 

因此,例如:

main() { 
    double n1 = 15.00; 
    double n2 = 15.50; 

    print(format(n1)); 
    print(format(n2)); 
} 

String format(double n) { 
    return n.toStringAsFixed(n.truncateToDouble() == n ? 0 : 2); 
} 

打印到控制檯:

15 
15.50 
+0

我不得不在這笑,因爲一種語言,聲稱喜歡簡潔 – fostandy

4

編輯:發表馬丁的解決方案作用似乎是一個更好的

我不認爲這是可以直接完成。你最有可能需要的東西是這樣的:

final f = new NumberFormat("###.00"); 

String format(num n) { 
    final s = f.format(n); 
    return s.endsWith('00') ? s.substring(0, s.length - 3) : s; 
} 
0

不太容易。解讀你想要什麼作爲印刷零位小數,如果它是一個整數值,剛好兩個,如果它是一個浮動,你可以做

var forInts = new NumberFormat(); 
var forFractions = new NumberFormat(); 

forFractions.minimumFractionDigits = 2; 
forFractions.maximumFractionDigits = 2; 

format(num n) => 
    n == n.truncate() ? forInts.format(n) : forFractions.format(n); 

print(format(15.50)); 
print(format(15.0)); 

但是,除非你想要的結果打印出來的效果對於有使用NumberFormat的這個小的優勢不同的地區。