Moin an alle,
und zwar bin ich heute auf folgendes Problem gestoßen:
Ich lese eine Datei mit Koordinaten ein - > dann muss es mir die Länge der Strecke berechnen.
Ich habe jetzt 2 verschiedenen Dateien mit einer und der selben Strecke, nur eine Datei hat auf der Strecke 100 punkte und andere 200 Punkte.
Die 100Punkte Datei wird eingelesen, Länge der Strecke berechnet und angezeigt
Die 200Punkte Datei wird eingelesen, Fehlermeldung > Fehlermeldung:
Der Wert für eine Decimal war zu groß oder zu klein. erscheint.
private double distance(double lat1, double lon1, double lat2, double lon2)
{
double theta = lon1 - lon2;
double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
dist = Math.Acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
dist = dist * 1.609344 * 1000;
return dist;
}
private double deg2rad(double deg)
{
return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad)
{
return (rad / Math.PI * 180.0);
}
private void längeberechnen(double lat1, double lon1, double lat2, double lon2)
{
inkm2 = distance(lat1, lon1, lat2, lon2);
inkm += inkm2;
textBoxLaenge.Text = Convert.ToDecimal(inkm).ToString("0.00");
}
Was muss ich ändern ? Bzw wo liegt mein Fehler ?
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Die Rechnung nachgegangen und die Zahlen überprüft?
Ich sehe nicht, wo dein Convert.ToDecimal() Sinn ergibt - sollte aber erst einmal nichts machen. Um herauszufinden, was da los ist:
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Die Rechnung nachgegangen und die Zahlen überprüft?
Ja das habe ich gemacht. Die Zahlen stimmen und es rechnet richtig. Lösche ich aus der 200Punkte Datei so 50 beliebige Punkte funktioniert es wieder einwandfrei. 8o
Bin gerade echt verzweifelt 🙁
Ich sehe nicht, wo dein Convert.ToDecimal() Sinn ergibt
Sobald ich es weg lasse kommt in der textBox =>** n. def.**
Na, dann mach doch mal das, was ich schrieb 🤔
Du hast offenbar Punkte dabei, bei denen durch 0 geteilt wird oder durch etwas, was sehr nahe an 0 ist.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Also habe es jetzt in try - catch gesetzt und es kommt bei jedem Durchlauf die Exception(s. Anhang)
Was mir bei Deinen Methodennamen auffällt: schreib sie in Englisch.
[Artikel] C#: Richtlinien für die Namensvergabe
Bitte Fehler nicht als Screenshot, sondern die Error-BBCode-Tags verwenden - dafür sind sie da.
In der Doku steht, dass diese Exception kommt, wenn der übergebene Wert größer ist als Decimal.MaxValue.
Hast Du das überprüft?
Ich kenn übrigens keine Lat/Long-Berechnung, die nicht double verwendet.
Das Convert macht hier keinen Sinn.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hier im Forum kann keiner für dich deine Maus greifen und über die Variablen und die Aufrufliste in deinem Visual Studio fahren. Das musst du schon selbst machen.
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Hallo,
Sobald ich es weg lasse kommt in der textBox => n. def.
Das und die Fehlermeldung deuten beide darauf hin, dass irgendwo double.NaN
ensteht in der distance
-Funktion.
Also prüfe mit
if(!double.IsNaN(inkm))
textBoxLaenge.Text = Convert.ToDecimal(inkm).ToString("0.00");
else
{
// hier ist was schiefgelaufen.
// Koordinaten ansehen und beim nächsten mal diese speziellen Koordinaten per if-Abfrage
// vor dem Aufruf abfangen, Haltepunkt setzen, durchsteppen, gucken was passiert.
}
Gruß, MarsStein
Edit: hatte ich doch das ! vor der Bedingung vergessen... wie im richtigen Leben 😉
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Habe mein Problem gelöst.
war bei einem Punkt die Koordinaten falsch, die beim anzeigen nicht berücksichtigt wird aber beim berechnen.
Danke für die Tipps
mfg Junior