2016-10-10 2 views
3

Есть ли способ с NumberFormat на дисплее:Dart - NumberFormat

  • '15', если двойное значение 15.00
  • '15 .50' , если двойное значение 15.50

Спасибо за вашу помощь ,

ответ

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

Edit: Решение опубликовано Martin seens быть лучше один

Я не думаю, что это может быть сделано непосредственно. Вы, скорее всего, нужно что-то вроде этого:

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 для этого, если вы не хотите, чтобы результат печать по-разному для разные локали.