Existe-t-il un moyen avec NumberFormat
d'afficher:
Merci de votre aide.
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
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;
}
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.
Peut-être que vous ne voulez pas utiliser NumberFormat:
class DoubleToString {
String format(double toFormat) {
return (toFormat * 10) % 10 != 0 ?
"$toFormat" :
"${toFormat.toInt()}";
}
}