2016-04-19 38 views
1

Ich möchte eine Zeichenfolge (w.main.temp) in eine ganze Zahl konvertieren. Ich verwende den folgenden Code:Wie konvertiert man String in 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(); 
      } 
     } 
    } 
} 

Aber es gibt mir eine Fehlermeldung:

Input string was not in a correct format.

Was brauche ich, um zu ändern, dass der Code string zu int korrekt konvertieren?

+2

Was ist der Inhalt von 'w.main.temp' vor dem Konvertieren? –

+1

Überprüfen Sie den Wert von 'w.main.temp'. Ziemlich gute Chancen bestehen darin, dass es sich tatsächlich um ein falsches Format handelt. Achten Sie besonders auf Kommas und Dezimalstellen. – dasblinkenlight

+0

Wenn ich w.main.temp.GetType() schreibe schreibt es System.String – user3488862

Antwort

5

Verwenden Sie einfach 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. 

Wenn Sie eine Reihe von links nach .

analysieren möchten z

w.main.temp = "123.45"; 

und Sie möchten Ausgabe int123 sein. Verwenden Sie dann den folgenden Code

+2

Wenn Sie 'int.TryParse' verwenden, sollten Sie entweder den Rückgabewert erfassen, um zu wissen, ob er fehlgeschlagen ist, oder ihn in eine 'if'-Anweisung schreiben. Es kann auch eine 'Null'-Zeichenfolge verarbeiten (wird 'false' zurückgeben). Schließlich wird 'int.TryParse' nicht besser funktionieren, wenn der String nicht wirklich ein gültiger Ganzzahlwert ist. – juharr

+0

es gibt false zurück ... wie wird es erfolgreich konvertiert? – user3488862

+1

@ user3488862 false bedeutet, dass Ihre Zeichenfolge kein gültiger Ganzzahlwert ist.Es klingt, als ob Sie tatsächlich einen Dezimalwert haben, also müssen Sie entweder die Zeichenfolge abschneiden, die mit der Dezimalzahl beginnt, oder zuerst in einen Typ konvertieren, der Dezimalzahlen verarbeitet, und dann in "int" umwandeln. – juharr

2

Ich überprüfte die Antwort des angeforderten Dienstes.

der w.main.temp hat "." (Bsp: 285,61, ich denke, es gibt Werte als Kelvin zurück) innerhalb des Wertes. Es ist also keine ganze Zahl.

Sie haben mehrere Optionen basierend auf dem, was Sie als Ergebnis haben möchten.

  1. können Sie die linke Seite von "."
  2. Sie können es zuerst in Dezimal konvertieren und dann den Boden oder Decke Wert davon dann in int konvertieren.
  3. etc ...
0

offenbar kann man nicht einen String in einen int umwandeln, wenn es nicht die Nummer int, weiß er nicht, wie es zu schneiden. meine Nummer war 304.15, also müssen Sie es in Doppel konvertieren.

0

Es sieht so aus, als wäre Ihre Variable keine Ganzzahl, Sie können sie entweder zuerst auf einen Int runden oder einfach einen Doppelwert anstelle eines Int verwenden.

Verwandte Themen