errore di eccezione formato c # Convert.ToDouble
-
22-10-2019 - |
Domanda
Sto cercando di convertire questa stringa a doppia
Convert.ToDouble("1.12");
e questo è l'uscita ??p>
System.FormatException è stata gestita.
Devo fare qualcosa di simile?
public static double ConvertToDouble(string ParseVersion)
{
double NewestVersion;
try
{
NewestVersion = Convert.ToDouble(ParseVersion);
}
catch
{
ParseVersion = ParseVersion.Replace('.', ',');
NewestVersion = Convert.ToDouble(ParseVersion);
}
return NewestVersion;
}
ConvertToDouble("1.12");
O c'è una soluzione più semplice?
Soluzione
double.Parse
userà la cultura corrente per impostazione predefinita. Sembra che si desidera che la cultura invarianti:
double d = double.Parse("1.12", CultureInfo.InvariantCulture);
EDIT: Giusto per essere chiari, ovviamente, non si dovrebbe usare questo se si sta cercando di analizzare il testo immesso da un utente in una cultura diversa. Questo è per l'uso quando hai ricevuto i dati in la cultura invarianti (come la maggior parte dei formati di testo basati su dati machine-to-machine sono) e si vuole far rispettare che durante l'analisi.
Altri suggerimenti
Non è necessario sostituire .
a ,
.. comunque un modo migliore è quello di utilizzare il metodo TryParse
.net come:
double d;
if (double.TryParse("your string data", out d)
{
Console.WriteLine(d);
}
Modifica Si noti inoltre che sostituendo .
da ,
si stanno ottenendo un risultato sbagliato, per esempio 1.12
:
double d = double.Parse(1.12);//d will equals to 1.12
double d = double.Parse(1,12);//d will equals to 112.0
usi Convert.ToDouble Double.Parse internamente. Se non sei sicuro del contesto culturale, è necessario utilizzare un sovraccarico del Double.Parse precisando cultura:
double d = double.Parse("1.12", CultureInfo.InvariantCulture);
Tenete a mente, questo problema può dipendere da dove la stringa di input proviene. Se viene letto da un database come un oggetto, si potrebbe risolvere il tuo problema con l'come un oggetto e utilizzando Convert.ToDouble () come segue:
public double Double_fromObject(object obj)
{
double dNum = 0.0;
if (obj.ToString() != string.Empty) // the Convert fails when ""
{
try
{
dNum = Convert.ToDouble(obj);
}
catch (SystemException sex)
{
// this class's error string
LastError = sex.Message;
}
}
return (dNum);
}