Parse value with Currency symbol

前端 未结 5 1964
耶瑟儿~
耶瑟儿~ 2021-01-21 13:58

I have looked to multiple SO questions on parsing currency, the best (recommended) way seems to be the one I\'m trying below:

var payout = decimal.Parse(\"$2.10\         


        
5条回答
  •  死守一世寂寞
    2021-01-21 14:18

    I've expounded on Hari Prasad's answer. With this you can minimize the culture result. Update "SupportedCultures" with the ones you might use in your app.

        private static readonly List SupportedCultures = new List {"en-US", "en-GB", "fr-FR"};
    
        public static void Main()
        {
            var (amount, culture) = ParseCurrencyWithSymbol("$256.12");
            Console.WriteLine($"{culture?.Name} | {amount}");
    
            var (amount2, culture2) = ParseCurrencyWithSymbol("£389.17");
            Console.WriteLine($"{culture2?.Name} | {amount2}");
    
            var (amount3, culture3) = ParseCurrencyWithSymbol("€421,10");
            Console.WriteLine(culture3 != null ? $"{culture3.Name} | {amount3}" : "Failed!");
        }
    
        public static Tuple ParseCurrencyWithSymbol(string input)
        {
            var culture = CultureInfo.GetCultures(CultureTypes.AllCultures)
                .Where(x => SupportedCultures.Contains(x.Name))
                .FirstOrDefault(c => input.Contains(c.NumberFormat.CurrencySymbol));
    
            if (culture == null) return new Tuple(null, null);
    
            return new Tuple(decimal.Parse(input,
                NumberStyles.Currency | NumberStyles.AllowCurrencySymbol |
                NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, culture), culture);
        }
    

提交回复
热议问题