S'il vous plaît voir mon exemple ci-dessous.
float maxFloat = float.MaxValue;
string s = maxFloat.ToString();
float result = float.Parse(s); // same with Convert.ToSingle(s);
bool mustEqual = (maxFloat == result);
// It returns FALSE, why?
S'il vous plaît voir mon exemple ci-dessous.
float maxFloat = float.MaxValue;
string s = maxFloat.ToString();
float result = float.Parse(s); // same with Convert.ToSingle(s);
bool mustEqual = (maxFloat == result);
// It returns FALSE, why?
Vous devez utiliser "R"
chaîne de format:
https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs. 110).aspx.
https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs. 110).aspx#RFormatString
"R" ou "r" Résultat aller-retour: Une chaîne de caractères qui peut aller-retour à un nombre identique. Pris en charge par: Simple, Double, et BigInteger. Spécificateur de précision: Ignoré.
float maxFloat = float.MaxValue;
string s = maxFloat.ToString("R"); // <- "R"
float result = float.Parse(s);
bool mustEqual = (maxFloat == result);
// It returns FALSE, why?
Parce que
float.ToString()
génère un nombre de précision à 7 chiffres par défaut, votrefloat.MaxValue
qui a pour valeur3.40282347E+38
(précision à 9 chiffres) sera arrondi à3.402823E+38
et votre chèque échoue à cause bien sûr de3.402823E+38 != 3.40282347E+38
.Si vous spécifiez explicitement un spécificateur de format pour générer
float.MaxValue
avec une précision de 9 chiffres, par exemplefloat.MaxValue.ToString("G9")
, votre vérification aboutira.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.