Feedback

C# - String in Double umwandeln (mit InvariantCulture)

Veröffentlicht von am 26.04.2008
(1 Bewertungen)
Das Problem einen Double in einen String umzuwandeln um ihn später (ggfs. nach Änderung) wieder zurück ein einen Double umzuwandeln ist nicht besonders groß.

Das gleiche Programm mit anderen Ländereinstellungen kann zu falschen Werten führen (aus 99,99 werden dann schnell 9999 Euro).

Abhilfe schafft hier "InvariantCulture".

Hier der zweite Teil : String 2 Double (mit oder ohne Default/Exceptions).

Aufrufbeispiel:

// String mit ,
double dblBetrag = ToDouble("123,45");
// String mit .
double dblBetrag = ToDouble("123.45");
// Fehler, Default 0 wird verwendet
double dblBetrag = ToDouble("rgjier", 0);

// Fehler, mit Try/Catch abgefangen
try
{
dblBetrag = ToDouble("rjeieg", true);
}
catch
{
dblBetrag = 0;
}
/// <summary>
/// Wandelt in String in Double um
/// </summary>
/// <param name="In"></param>
/// <returns></returns>
public static double ToDouble(string In)
{
    In = In.Replace(",", ".");

    return double.Parse(In, System.Globalization.CultureInfo.InvariantCulture);
}

/// <summary>
/// Wandelt String in Double um mit Default falls es nicht möglich ist
/// </summary>
/// <param name="In"></param>
/// <param name="Default"></param>
/// <returns></returns>
public static double ToDouble(string In, double Default)
{
    double dblOut;

    In = In.Replace(",", ".");

    try
    {
        dblOut = double.Parse(In, System.Globalization.CultureInfo.InvariantCulture);
    }
    catch
    {
        dblOut = Default;
    }

    return dblOut;
}

/// <summary>
/// Wandelt einen String in Double um (Default = 0 oder es wird eine Exception ausgelöst)
/// </summary>
/// <param name="In">String</param>
/// <param name="UseExceptions">True (Exception wird ausgelöst) oder False (Default 0 wird verwendet)</param>
/// <returns></returns>
public static double ToDouble(string In, bool UseExceptions)
{
    double dblOut;

    In = In.Replace(",", ".");

    try
    {
        dblOut = double.Parse(In, System.Globalization.CultureInfo.InvariantCulture);
    }
    catch (Exception ex)
    {
        if (UseExceptions)
            throw ex;
        else
            dblOut = 0;
    }

    return dblOut;
}

1 Kommentare zum Snippet

Firendeath schrieb am 02.06.2010:
Würde die erste Funktion nicht auch mit...
Convert.ToDouble(string);

... funktionieren ?
 

Logge dich ein, um hier zu kommentieren!