[c#] Convertire la stringa di valuta in decimale?



1 Answers

Che ne dici di questo, ma funziona solo con un valore di stringa. Quindi è necessario split stringa da $ e quindi effettuare la conversione salvando array o list

 using System.Globalization;
    //rest of your code

          string str = "$50,550.20";
          decimal decval;
          bool convt = decimal.TryParse(str, NumberStyles.Currency,
            CultureInfo.CurrentCulture.NumberFormat, out decval);
          if (convt) 
          Console.WriteLine(decval);
          Console.ReadLine();
Question

Obbiettivo

Ordina una string che visualizza i dati di valuta come questo $1,995.94 numericamente in un set di dati.

Codice

Attualmente sto usando l'esempio di codice seguente per convertire il valore della string in decimal modo da poterlo ordinare correttamente.

if (sortBy == "checkAmount")
{
    StringBuilder sb = new StringBuilder();
    foreach (var c in Convert.ToString(p.GetType().GetProperty(sortBy).GetValue(p, null)))
    {
        if (!char.IsDigit(c) && c != '.') { continue; }
        sb.Append(c);
    }
    return Convert.ToDecimal(sb.ToString());
}
else
{
    return p.GetType().GetProperty(sortBy).GetValue(p, null);
}

Problema

Qual è un modo migliore per farlo? Funziona, e questo è bello, ma non è molto elegante.

Soluzione finale

La risposta fornita da Servy funziona come previsto , e ho usato questa implementazione per un po ', ma un collega e io abbiamo trovato un modo ancora migliore per documentarlo qui. A proposito, ho finito per utilizzare questa soluzione alla fine.

decimal.Parse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.Number);



Ecco una soluzione più semplice:

    public static decimal ToDecimal(this string str)
    {
        return decimal.Parse(str, NumberStyles.Currency);
    }

e il test unitario:

    [Test]
    public void ToDecimal_Convert_String_To_Decimal()
    {
        Assert.AreEqual(1234M, "1234".ToDecimal());
        Assert.AreEqual(-1234.56M, "$(1,234.56)".ToDecimal());
        Assert.AreEqual(1234.56M, "$1,234.56".ToDecimal());
    }



Related