2016-04-19 2 views
1

Я хочу преобразовать строку (w.main.temp) в целое число. Я использую следующий код:Как преобразовать строку в int C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Text; 
using System.Threading.Tasks; 
using System.Collections; 

namespace project1 
{ 

    interface IWeatherDataService 
{ 
     // public WeatherData GetWeatherData(Location location); 

} 

    public class WeatherData 
    { 
     public string temp { get; set; } 
    } 
    public class Location 
    { 
     public string name { get; set; } 
     public string id { get; set; } 

     public WeatherData main { get; set; } 

    } 
    public class WeatherDataServiceException 
    { 

    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      RunAsync().Wait(); 
     } 
     static async Task RunAsync() 
     { 
      using (var client = new HttpClient()) 
      { 
       client.BaseAddress = new Uri("http://api.openweathermap.org/data/2.5/weather"); 
       client.DefaultRequestHeaders.Accept.Clear(); 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

       string City = "ho chi minh"; 
       string Key = "ca618d97e8b322c883af330b7f103f2d"; 

       HttpResponseMessage response = await client.GetAsync("?q=" + City + "&APPID="+Key); 
       if(response.StatusCode == HttpStatusCode.OK) 
       { 

        Location w = response.Content.ReadAsAsync<Location>().Result; 

        int res = Convert.ToInt32(w.main.temp); 

        //Console.WriteLine(w.main.temp.GetType()); 

        Console.WriteLine("id city: " + w.id); 
        Console.WriteLine("city: " + w.name); 
        Console.WriteLine("temperature: " + w.main.temp); 
       } 
       Console.ReadKey(); 
      } 
     } 
    } 
} 

Однако, это даст мне ошибку:

Input string was not in a correct format.

Что мне нужно изменить для того, чтобы код будет конвертировать string в int правильно?

+2

Какое содержимое 'w.main.temp' перед конвертированием? –

+1

Проверьте значение 'w.main.temp'. Довольно хорошие шансы, что это действительно неправильный формат. Обратите особое внимание на запятые и десятичные точки. – dasblinkenlight

+0

когда я пишу w.main.temp.GetType() записывает System.String – user3488862

ответ

5

Просто используйте int.TryParse(string, out int parameter)

int res = 0; 
bool parseSuccessful = int.TryParse(w.main.temp, out res); 

//int.TryParse() returns a bool value to indicate whether parsing is Successful or not. 

Если вы хотите, чтобы разобрать номер слева .

например

w.main.temp = "123.45"; 

и вы хотите выход int быть 123. Затем используйте следующий код:

if (w.main.temp.IndexOf(".") >= 0) 
{ 
    parseSuccessful = int.TryParse(w.main.temp.Substring(0, w.main.temp.IndexOf(".")), out res); 
} 
+2

Если вы собираетесь использовать 'int.TryParse', вы должны либо захватить возвращаемое значение, чтобы узнать, не удалось ли оно, либо поместить его в оператор' if'. Также он может обрабатывать строку «null» (возвращает 'false'). Наконец, 'int.TryParse' не будет работать лучше, если строка не является действительным целочисленным значением. – juharr

+0

возвращает false ... как его успешно конвертировать? – user3488862

+1

@ user3488862 false означает, что ваша строка не является допустимым целочисленным значением.Похоже, что вы действительно получили десятичное значение, поэтому вам нужно либо усечь строку, начинающуюся с десятичной, либо первой конвертировать в тип, который обрабатывает десятичные числа, а затем конвертируется в 'int'. – juharr

2

Я проверил ответ услуги, которую вы запросили.

У w.main.temp есть "." (Пример: 285.61, я думаю, он возвращает значения как Kelvin) внутри значения. Так что это не целое число.

У вас есть несколько вариантов, основанных на том, что вы хотите получить в результате.

  1. вы можете получить левую сторону от "."
  2. Вы можете сначала преобразовать его в десятичный, а затем получить значение пола или потолка, а затем преобразовать его в int.
  3. и т.д ...
0

по-видимому, вы не можете преобразовать строку в межд, если это не Int номер, он не знает, как резать. мой номер был 304.15, поэтому вам нужно преобразовать его в двойное.

0

Похоже, что ваш var не является целым числом, вы можете либо округлить его до int, либо просто использовать double вместо int.

Смежные вопросы