You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/p02_Fondamentaux/ex_013_001_FormattingParsin.../Program.cs

175 lines
7.6 KiB

// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Program.cs
// Author : Marc Chevaldonné
// Creation date : 2016-09-23
//
// ========================================================================
using System;
using System.Text;
using static System.Console;
namespace ex_013_001_FormattingParsingTypesNumeriquesEtBool
{
class Program
{
static void Main(string[] args)
{
OutputEncoding = Encoding.Unicode;
//Formatage avec ToString
bool b = true;
string s = b.ToString();
WriteLine($"b vaut {s}");
int i = 123, j = 1234, k = 12345;
s = i.ToString();
WriteLine($"i vaut {i}");
WriteLine();
WriteLine("FORMATS STANDARDS");
//il existe énormément de variantes :
//Format standards
float f = 12345.6789f;
float g = 0.00000006f;
float h = 123456789.123f;
WriteLine($"f = {f.ToString()}");
WriteLine($"g = {g.ToString()}");
WriteLine($"h = {h.ToString()}");
WriteLine("\nG : notation exponentielle pour les grands ou les petits nombres");
WriteLine($"f.ToString(\"G\") : {f.ToString("G")}");
WriteLine($"g.ToString(\"G\") : {g.ToString("G")}");
WriteLine($"h.ToString(\"G\") : {h.ToString("G")}");
WriteLine("\nG3 : limite la notation à 3 chiffres maximum");
WriteLine($"f.ToString(\"G3\") : {f.ToString("G3")}");
WriteLine($"g.ToString(\"G3\") : {g.ToString("G3")}");
WriteLine($"h.ToString(\"G3\") : {h.ToString("G3")}");
WriteLine("\nF2 : arrondit à deux décimales");
WriteLine($"f.ToString(\"F2\") : {f.ToString("F2")}");
WriteLine($"g.ToString(\"F2\") : {g.ToString("F2")}");
WriteLine($"h.ToString(\"F2\") : {h.ToString("F2")}");
WriteLine("\nE : force la notation exponentielle (avec 6 chiffres, existe aussi avec E2, E3...");
WriteLine($"f.ToString(\"E\") : {f.ToString("E")}");
WriteLine($"g.ToString(\"E2 \") : {g.ToString("E2")}");
WriteLine($"h.ToString(\"E3\") : {h.ToString("E3")}");
WriteLine("\nC : currency (monnaie)");
WriteLine($"f.ToString(\"C\") : {f.ToString("C")}");
//number format info
System.Globalization.NumberFormatInfo monnaie = new System.Globalization.NumberFormatInfo();
monnaie.CurrencySymbol = "$$";
WriteLine($"g.ToString(\"C2 \") : {g.ToString("C2", monnaie)}");
//culture info
System.Globalization.CultureInfo info = new System.Globalization.CultureInfo("en-GB");
WriteLine($"h.ToString(\"C3\") : {h.ToString("C3", info)}");
WriteLine();
float p = 0.5349f, q = 0.53492f, r = 0.534923f;
WriteLine($"p = {p.ToString()}");
WriteLine($"q = {q.ToString()}");
WriteLine($"r = {r.ToString()}");
WriteLine("\nP : pourcentage");
WriteLine($"p.ToString(\"P\") : {p.ToString("P")}");
WriteLine($"a.ToString(\"P0 \") : {q.ToString("P0")}");
WriteLine($"r.ToString(\"P1\") : {r.ToString("P1")}");
WriteLine();
WriteLine($"i = {i.ToString()}");
WriteLine($"j = {j.ToString()}");
WriteLine($"k = {k.ToString()}");
WriteLine("\nD4 : pad left avec des 0 à gauche pour avoir au moins 4 chiffres");
WriteLine($"i.ToString(\"D4\") : {i.ToString("D4")}");
WriteLine($"j.ToString(\"D4\") : {j.ToString("D4")}");
WriteLine($"k.ToString(\"D4\") : {k.ToString("D4")}");
WriteLine();
//formats personnalisés
WriteLine("FORMATS PERSONNALISES");
float l = 123.456f;
WriteLine($"l = {l}");
WriteLine("\n .## limite à deux nombres max après la virgule");
WriteLine($"l.ToString(\".##\") : {l.ToString(".##")}");
WriteLine($"l.ToString(\".###\") : {l.ToString(".###")}");
WriteLine("\n .00 comme précédemment mais complète avec des 00");
WriteLine($"l.ToString(\".00\") : {l.ToString(".00")}");
WriteLine($"l.ToString(\".0000\") : {l.ToString(".0000")}");
WriteLine($"l.ToString(\"00.00\") : {l.ToString("00.00")}");
WriteLine($"l.ToString(\"0000.00\") : {l.ToString("0000.00")}");
int m = 5, n = -5, o = 0;
WriteLine();
WriteLine($"m = {m}");
WriteLine($"n = {n}");
WriteLine($"o = {o}");
WriteLine("\n +#;(#);zero rend le nombre \"+lenombre\" si positif, \"(lenombre)\" si négatif, \"zero\" si = 0");
WriteLine($"m.ToString(\"+#;(#);zero\") : {m.ToString("+#;(#);zero")}");
WriteLine($"n.ToString(\"+#;(#);zero\") : {n.ToString("+#;(#);zero")}");
WriteLine($"o.ToString(\"+#;(#);zero\") : {o.ToString("+#;(#);zero")}");
WriteLine();
//parsing
WriteLine("PARSING");
//méthodes statiques Parse, mais il vaut mieux la mettre dans un bloc try
WriteLine("i = int.Parse(\"yaha\");");
try
{
i = int.Parse("yaha");
}
catch (FormatException e)
{
WriteLine($"le parse a échoué (exception : {e.Message})");
}
WriteLine("i = int.Parse(123);");
try
{
i = int.Parse("123");
}
catch (FormatException e)
{
WriteLine($"le parse a échoué (exception : {e.Message})");
}
WriteLine(i);
//ou avec TryParse : rend true si a fonctionné et le résultat dans le paramètre out
//rend false si n'a pas fonctionné et il ne faut surtout pas regarder le résultat dans out
// pas d'exception de lancée
WriteLine("int.TryParse(\"yaha\", out i) + \" échec\"");
WriteLine($"{int.TryParse("yaha", out i)} échec");
WriteLine("int.TryParse(\"123\", out i) + \" \" + i");
WriteLine($"{int.TryParse("123", out i)} {i}");
//attention à la culture !
//WriteLine(double.Parse("1.23"));
WriteLine("double.Parse(\"1,23\")");
WriteLine(double.Parse("1,23"));
WriteLine("double.Parse(\"1.23\", System.Globalization.CultureInfo.InvariantCulture)");
WriteLine(double.Parse("1.23", System.Globalization.CultureInfo.InvariantCulture));
//on peut compléter le parsing avec des styles (flags)
//autoriser les parenthèses :
string stringToParse = "(123)";
WriteLine($"stringToParse = {stringToParse}");
WriteLine($"int.TryParse(stringToParse, out i) = {int.TryParse(stringToParse, out i)}");
WriteLine("int.TryParse(stringToParse, System.Globalization.NumberStyles.AllowParentheses, System.Globalization.CultureInfo.CurrentCulture, out i) = {0}\ni vaut = {1}",
int.TryParse(stringToParse,
System.Globalization.NumberStyles.AllowParentheses,
System.Globalization.CultureInfo.CurrentCulture,
out i),
i);
}
}
}