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);




c#