Как я могу получить правильную валюту с 2 десятичными знаками в c #? - PullRequest
4 голосов
/ 07 ноября 2011
 public PriceTable ConvertToUSDollar(decimal Amount,string Currency)
       {

           try
           {
               var toCurrency = "USD";
               var fromCurrency = "AUD";

               string url = string.Format("http://www.google.com/ig/calculator?hl=en&q=       {2}{0}%3D%3F{1}", fromCurrency .ToUpper(), toCurrency.ToUpper(), 1000);
               WebClient web = new WebClient();
               string response = web.DownloadString(url);
               Regex regex = new Regex("rhs: \\\"(\\d*.\\d*)");
               Match match = regex.Match(response);                          
               string rate = (match.Groups[1].Value.Trim());
               rate = Regex.Replace(rate, @"\s", "");                  
               decimal Value = Convert.ToDecimal(rate);
               var pricetable = new PriceTable()
               {
                   Price = Value

               };    
               return pricetable;
           }
           catch(Exception e) {

               throw new Exception("Error Occoured While Converting");
           }

       }

В этом случае результирующая валюта не содержит десятичного значения. Как я могу получить точную валюту с десятичной частью в ней?

1 Ответ

3 голосов
/ 07 ноября 2011

Интересно это.Я запустил ваш код, и API вернул:

{lhs: "1000 Australian dollars",rhs: "1 028.9 U.S. dollars",error: "",icc: true}

Между 1 и 0 результата rhs есть пробел (или, возможно, символ, похожий на запятую Unicode).Глядя на ваше регулярное выражение,.на самом деле соответствует этот символ, как.означает «любой символ» в регулярном выражении.Соответствие фактической десятичной запятой требует обратной косой черты.Я добавил это и еще один \ d для чисел после запятой.Я использовал синтаксис @, чтобы облегчить чтение экранирования, что дает:

Regex regex = new Regex(@"rhs: \""(\d*.\d*\.\d)");

В результате возвращается 1028,9.

...