web-dev-qa-db-fra.com

Dart - NumberFormat

Existe-t-il un moyen avec NumberFormat d'afficher:

  • '15' si la valeur double est 15,00
  • '15 .50 'si la valeur double est 15,50

Merci de votre aide.

11
matth3o

En fait, je pense qu'il est plus facile d'utiliser truncateToDouble() et toStringAsFixed() et de ne pas utiliser NumberFormat du tout:

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

Ainsi, par exemple:

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);
}

Impressions sur console:

15
15.50
29
martin

Edit: La solution proposée par Martin semble être meilleure

Je ne pense pas que cela puisse être fait directement. Vous aurez probablement besoin de quelque chose comme ceci:

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;
}
5
Kul

Pas très facilement. Interpréter ce que vous voulez comme imprimer zéro décimale s'il s'agit d'une valeur entière et précisément deux s'il s'agit d'un flottant, vous pouvez le faire

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));

Mais il y a peu d'avantages à utiliser NumberFormat pour cela, sauf si vous voulez que le résultat s'imprime différemment pour différents paramètres régionaux.

1
Alan Knight

Peut-être que vous ne voulez pas utiliser NumberFormat:

class DoubleToString {
  String format(double toFormat) {
    return (toFormat * 10) % 10 != 0 ?
      "$toFormat" :
      "${toFormat.toInt()}";
  }
}
0
Durdu