2016-10-10 110 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的这个小的优势不同的地区。