Décimales avec toStringAsFixed
Fait partie de la section Rendre l’application interactive du Journey Flutter de Coddy. Leçon 26 sur 34.
Un nombre avec un séparateur décimal est un double. Il se lit à partir d’un texte de la même manière, avec double.tryParse :
double.tryParse('2.5') ?? 0 // 2.5
int.tryParse('2.5') ?? 0 // 0 : pas un nombre entierLes calculs avec des nombres à virgule flottante donnent souvent de longues décimales : 5 * 0.621371 vaut 3.106855, et 10 / 3 vaut 3.3333333333333335. Pour afficher un nombre fixe de décimales, utilise toStringAsFixed. Cette méthode arrondit et renvoie une chaîne :
(10 / 3).toStringAsFixed(2) // '3.33'
3.106855.toStringAsFixed(1) // '3.1'Par défaut, le clavier numérique ne comporte pas de séparateur décimal. TextInputType.numberWithOptions(decimal: true) en ajoute un.
Défi
MoyenL’application convertit les kilomètres en miles, mais elle ne lit que des nombres entiers et affiche de longues décimales.
- Lisez le champ avec
double.tryParsepour que2.5fonctionne, et faites de_kmundouble. - Attribuez au champ un clavier numérique avec un séparateur décimal.
- Affichez les miles avec deux décimales :
That is 3.11 milespour 5 km.
Essayez vous-même
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _km = 0;
@override
Widget build(BuildContext context) {
final double miles = _km * 0.621371;
return Scaffold(
appBar: AppBar(title: const Text('Distance')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
keyboardType: TextInputType.number,
decoration: const InputDecoration(
labelText: 'Kilometers',
border: OutlineInputBorder(),
),
onChanged: (String value) {
setState(() {
_km = int.tryParse(value) ?? 0;
});
},
),
const SizedBox(height: 24),
Text('That is $miles miles', style: const TextStyle(fontSize: 24)),
],
),
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Rendre l’application interactive
1Boutons
Votre premier boutonAfficher dans la consoleBoutons textuels et à contourBoutons avec icôneLe bouton d’action flottant7Interrupteurs et curseurs
Allumer et éteindre avec un interrupteurCocher une caseChoisir une valeur avec un curseur3Widgets avec état
Une classe de widget à vousAfficher une SnackBarsetState redessine l’écranÉcrire un StatefulWidgetUn compteur qui monte et qui descendLe rechargement à chaud conserve l’état6Champs de texte
Votre premier champ de texteRéagir à la saisieLire un champ avec un contrôleurNombres dans un champ de texteDécimales avec toStringAsFixedEntraînez-vous par vous-même : Compilateur Flutter en ligne