Domanda

Sto cercando di convertire questa stringa a doppia

Convert.ToDouble("1.12");

e questo è l'uscita

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?

È stato utile?

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);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top