none
App kann mit Dezimalzahlen nicht rechnen RRS feed

  • Frage

  • Hallo,

    um mir die Physik Hausaufgaben zu vereinfachen, habe ich mir eine sehr einfache App geschrieben, die mir die Momentangeschwindigkeit bei quadratischen Funktionen berechnet (siehe folgender Code)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using Microsoft.Phone.Controls;
    using Microsoft.Phone.Shell;
    using Momentangeschwindigkeitsberechner.Resources;
    
    namespace Momentangeschwindigkeitsberechner
    {
        public partial class MainPage : PhoneApplicationPage
        {
            // Konstruktor
            public MainPage()
            {
                InitializeComponent();
    
                // Beispielcode zur Lokalisierung der ApplicationBar
                //BuildLocalizedApplicationBar();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {  
                if (t1.Text !="")
                {
                    if (t2.Text != "")
                    {
                        if (mg.Text != "")
                        {try
                            {
                            decimal s1 = 0;
                            decimal s2 = 0;
                            decimal t5 = 0;
                            decimal t6 = 0;
                            decimal s3 = 0;
                            decimal s4 = 0;
                            decimal mggt = 0;
                            decimal mggs = 0;
                            decimal mgg = 0;
                            decimal mg2 = Int32.Parse(mg.Text);
                            decimal t3 = Int32.Parse(t1.Text);
                            decimal t4 = Int32.Parse(t2.Text);
    
                          
                                Verlauf.Text = " => Anfangsweg und Endweg berechnen...";
                                s1 = t3 * t3;
                                s2 = t4 * t4;
                                Verlauf.Text += " => " + "Anfangsweg = " + s1.ToString();
                                Verlauf.Text += " => " + "Endweg = " + s2.ToString();
                                Verlauf.Text += " => Berechnen von t(1)1, t(1)2, s(1)1 und s(1)2...";
                                t5 = mg2 - t3;
                                t5 = t5 / 2;
                                t5 = t5 + t3;
                                t6 = mg2 - t4;
                                t6 = t6 / 2;
                                t6 = t6 + t4;
                                s3 = t5 * t5;
                                s4 = t6 * t6;
                                Verlauf.Text += " => t(1)1= " + t5.ToString();
                                Verlauf.Text += " => t(1)2= " + t6.ToString();
                                Verlauf.Text += " => s(1)1= " + s3.ToString();
                                Verlauf.Text += " => s(1)2= " + s4.ToString();
                                Verlauf.Text += " => Berechnen der Momentangeschwindigkeit V...";
                                mggs = s4 - s3;
                                mggt = t6 - t5;
                                mgg = mggs / mggt;
                                pb.Value = 1;
                                Verlauf.Text += " => Berechnungen erfolgreich abgeschlossen.";
                                mggblock.Text = mgg.ToString() + " m/s";
                            }
                            catch { MessageBox.Show("Fehler bei der Berechnung");
                            Verlauf.Text = "Fehler bei der Berechnung.";
                            }
                        }else { MessageBox.Show("Bitte alle Felder ausfüllen"); }
                        
                    }else { MessageBox.Show("Bitte alle Felder ausfüllen"); }
                }
                else { MessageBox.Show("Bitte alle Felder ausfüllen"); }
    
               
    
    
            }
    
            // Beispielcode zur Erstellung einer lokalisierten ApplicationBar
            //private void BuildLocalizedApplicationBar()
            //{
            //    // ApplicationBar der Seite einer neuen Instanz von ApplicationBar zuweisen
            //    ApplicationBar = new ApplicationBar();
    
            //    // Eine neue Schaltfläche erstellen und als Text die lokalisierte Zeichenfolge aus AppResources zuweisen.
            //    ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
            //    appBarButton.Text = AppResources.AppBarButtonText;
            //    ApplicationBar.Buttons.Add(appBarButton);
    
            //    // Ein neues Menüelement mit der lokalisierten Zeichenfolge aus AppResources erstellen
            //    ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
            //    ApplicationBar.MenuItems.Add(appBarMenuItem);
            //}
        }
    }

    mg, t1 und t2 sind TextBoxen. Wenn ich in eine der TextBoxen nun eine Dezimalzahl eingebe, kommt die unten im Code eingetragene Messagebox (Fehler bei der Berechnung)

    Warum kann ich mit diesem Code jetzt nicht mit Dezimalzahlen rechnen? Wobei das Programm Dezimalzahlen aus ganzen Zahlen ausrechnen kann.

    MfG Ced14


    Ced

    Montag, 12. Oktober 2015 16:45

Antworten

Alle Antworten

  • Hi,

    zum einen solltest Du die exakte und vollständige Fehlermeldung posten. Sämtliche Exceptions "abfangen" und dann rein gar nichts mit ihnen anstellen (noch nicht mal eine Ausgabe für Debugzwecke) ist meist nicht sinnvoll.

    Schau dir bitte man den MSDN Artikel zu try ... catch an und ändere dann den Code so, dass im catch Zweig die Exception in einer Variablen zur Verfügung steht. Die kannst Du dann mal mit ex.ToString() ausgeben und das Resultat dann hier posten.

      https://msdn.microsoft.com/de-de/library/0yd65esw.aspx

    Generell nehme ich aber mal an, dass es am falschen Dezimaltrennzeichen liegt. Je nachdem, ob Du es bisher mit 1,23 (also Komma) oder 1.23 (also Punkt) probiert hast, probier es einfach mal mit dem jeweils anderen Trennzeichen.

    Zudem solltest Du, wenn Du Decimal erwartet, nicht unbedingt mit Int32.TryParse arbeiten. Welchen Sinn sollte das machen, außer dass (wenn es denn klappen würde) die Dezimalstellen weggeschnitten würden?

    Nimm also lieber Decimal.TryParse:

      https://msdn.microsoft.com/de-de/library/9zbda557.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Montag, 12. Oktober 2015 16:54
    Moderator
  • Hallo,

    Int32.Parse  erwartet eine ganze Zahl im String, sonst wird eine Format Exception (wie in deinem Fall) geworfen.   

    Für die Konverierung eines String in Dezimalzahlen kann man Decimal.Parse(..) oder Decimal.TryParse(..) verwenden:

                    decimal value = 0;
                    if (Decimal.TryParse(t1.Text, out value) == false)
                    {//Fehler
    
                    }
    Grüße


    Montag, 12. Oktober 2015 19:49
  • Ich habe meinen Fehler gefunden. Ich habe die Dezimalzahlen als Integer definiert (was ja schon nicht funktioniert) und daraus ein decimal gemacht. Tut mir leid, wenn ich euch, vor allem dich Stefan aufgrund dieses Schusselfehlers aufgehalten habe.

    Aber trotzdem Danke.

    MfG Ced14


    Ced


    decimal mg2 = Convert.ToDecimal(mg.Text);
    decimal t3 = Convert.ToDecimal(t1.Text);
    decimal t4 = Convert.ToDecimal(t2.Text);
    
    //hier war der Fehler

    • Bearbeitet Ced14 Montag, 12. Oktober 2015 20:12
    Montag, 12. Oktober 2015 20:07
  • Danke auch dir iso7, ich habe die Seite zu spät aktualisiert, aber trotzdem danke.

    MfG Ced14


    Ced

    Montag, 12. Oktober 2015 20:10
  • Hi,

    Tut mir leid, wenn ich euch, vor allem dich Stefan aufgrund dieses Schusselfehlers aufgehalten habe.

    kein Problem, dafür sind wir ja (auch^^) da :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 13. Oktober 2015 10:30
    Moderator