Есть ли способ с NumberFormat
на дисплее:Dart - NumberFormat
- '15', если двойное значение 15.00
- '15 .50' , если двойное значение 15.50
Спасибо за вашу помощь ,
Есть ли способ с NumberFormat
на дисплее:Dart - NumberFormat
Спасибо за вашу помощь ,
На самом деле, я думаю, что легче пойти с 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
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;
}
Не очень легко. Устное то, что вы хотите, как печать нулевых знаков после запятой, если это целое значение, и именно два, если это поплавок, вы могли бы сделать
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 для этого, если вы не хотите, чтобы результат печать по-разному для разные локали.
Я должен посмеяться над этим, для языка, который, как утверждается, хотел бы быть кратким – fostandy