from - try parseint c#
Perché la conversione tra stringa e float è errata? (2)
Si prega di vedere il mio esempio qui sotto.
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?
// It returns FALSE, why?
Perché float.ToString()
restituisce un numero di precisione a 7 cifre per impostazione predefinita, quindi il tuo float.MaxValue
che ha un valore di 3.40282347E+38
(precisione a 9 cifre) verrà arrotondato a 3.402823E+38
e il tuo controllo fallirà a causa di corso 3.402823E+38 != 3.40282347E+38
.
Se si specifica esplicitamente un float.MaxValue
formato per generare float.MaxValue
con float.MaxValue
a 9 cifre, ad esempio float.MaxValue.ToString("G9")
, il controllo avrà esito positivo.
Dovresti usare la stringa di formato "R"
:
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" o "r" Round-trip Risultato: una stringa che può effettuare il round-trip su un numero identico. Supportato da: Single, Double e BigInteger. Specificatore di precisione: ignorato.
float maxFloat = float.MaxValue;
string s = maxFloat.ToString("R"); // <- "R"
float result = float.Parse(s);
bool mustEqual = (maxFloat == result);