Si prega di vedere il mio esempio qui sotto.Perché la conversione tra stringa e float è errata?
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?
Dmitry ha la risposta, ma nota che confrontare i float per l'uguaglianza esatta è quasi sempre un errore: devi scegliere il tipo di precisione desiderato, assicurarti che rientri nelle capacità del tipo di dati specificato e fare il confronto solo per la precisione data. – Luaan
@Luaan Non è un errore se ci si assicura che i viaggi di andata e ritorno non cambino il valore, che è una cosa valida da desiderare dalla serializzazione e deserializzazione. Anche se i calcoli successivi non sono esattamente prevedibili a causa dell'arrotondamento, non c'è motivo di accettare errori di arrotondamento su passi che possono essere esatti (come un float -> stringa -> float roundtrip). – delnan
Il confronto dei valori in virgola mobile per l'uguaglianza è quasi * sempre * un *** *** ***. – RBarryYoung