2016-04-19 50 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"; 

,你想輸出int123。然後使用下面的代碼

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。