Announcement

Collapse
No announcement yet.

If Abfrage von Double Werten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • If Abfrage von Double Werten

    Code:
    if(Double.valueOf(String.valueOf(liste_gr.getItem()))<=Double.valueOf(String.valueOf(preis.text()))){...}
    Ich arbeite zur Zeit mit einer Liste (Lineare Datenstruktur), weiß aber hier nicht weiter. die Liste "liste_gr", sowie das Textfeld "preis.text()", wurden mit double Werten der Form "xx.xx" gefüllt. Eigentlich sollte nun das Listenelement, wenn es kleiner oder gleich des Wertes der Textbox ist, ausgegeben werden. Doch das geschieht nicht.

    Mit einer Konsolenausgabe hab ich schon getestet, ob in der Liste ein Wert der Form "xx.xx" steht. Da ist so ein Wert drin.

    Wo steckt der Fehler?
    Was soll/muss ich verbessern?

    Danke für Antworten!
    PHP Code:
    <?php
    echo 'http://acs-it-worx.de/';
    echo 
    'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
    echo '-----------------------------------------------------------------';
    echo 
    'http://www.autoservice-asberg.de/';
    ?>

  • #2
    Hi,

    Gleitkommatypen sollten wegen der näherungsweisen Darstellung nicht mit == auf Gleichheit geprüft werden.

    zb:
    Code:
    const double epsilon = 0.00001;
    
    double d1 = 10.0;
    double d2 = 9.9;
    double d3 = 0.1;
    
    if ((d1 - d2) == d3)                               // wird als "false" ausgewertet
    	Console.WriteLine("ident1");
    
    if ((Math.Abs(d1 - d2)) - d3 < epsilon)  // wird als "true" ausgewertet
    	Console.WriteLine("ident2");
    Zur Berechnung von Epsilon - die Maschinengenauigkeit - kann ein Code-Snippet verwendet das ich hier veröffentlich habe (ist allerdings in C#, aber der Code sollte leicht nach JAVA portierbar sein - sind nur ein paar Zeilen)

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Wenn ich "normale" Zahlen (z.B.: 1; 2; 3; 4; ...) einsetze geht das eigentlich auch.

      Aber wenns dann Kommazahlen (xx.xx) sind nicht mehr.
      PHP Code:
      <?php
      echo 'http://acs-it-worx.de/';
      echo 
      'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
      echo '-----------------------------------------------------------------';
      echo 
      'http://www.autoservice-asberg.de/';
      ?>

      Comment


      • #4
        Woher kommen deine Werte?

        double eins=3.141514151515;
        double zwei=3.141514151514;

        System.out.println(eins<zwei);

        funktioniert einwandfrei

        Was ist das für eine Liste?
        Was ergibt liste_gr.getItem() für einen Wert?
        Christian

        Comment


        • #5
          Zum einen sind die Werte in einer Liste zwischengespeichert und werden dann mit...
          Code:
          Double.valueOf(String.valueOf(liste_gr.getItem()))
          .. zu einem Double-Wert konvertiert (Habs mit einer Konsolenausgabe getestet. Das ausgegebene Item ist z.B.: 2.5). Zum anderen gebe ich in ein Textfeld "preis" 'xx,xx' ein, was dann via Code umgestaltet wird in 'xx.xx' in komma_temp, was dann wieder umkonventiert wird.
          Code:
          Double.valueOf(String.valueOf(komma_temp))
          Somit hab ich, davon gehe ich zumindest aus, zwei Double Werte.
          PHP Code:
          <?php
          echo 'http://acs-it-worx.de/';
          echo 
          'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
          echo '-----------------------------------------------------------------';
          echo 
          'http://www.autoservice-asberg.de/';
          ?>

          Comment


          • #6
            Nun, da du oben

            String.valueOf(preis.text

            benutzt, lag der Verdacht nahe, dass du keinen double bekommst....
            Christian

            Comment


            • #7
              Sry...hatte mich ganz oben mit "preis.text()"verschrieben. Meinte "komma_temp"
              PHP Code:
              <?php
              echo 'http://acs-it-worx.de/';
              echo 
              'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
              echo '-----------------------------------------------------------------';
              echo 
              'http://www.autoservice-asberg.de/';
              ?>

              Comment


              • #8
                Allerdings machst du eine doppelte Stringumwandlung

                Double.valueOf

                erwartet einen String

                String.valueOf

                wandelt ebenfalls um
                Christian

                Comment


                • #9
                  komma_temp ist ein Charakter
                  PHP Code:
                  <?php
                  echo 'http://acs-it-worx.de/';
                  echo 
                  'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
                  echo '-----------------------------------------------------------------';
                  echo 
                  'http://www.autoservice-asberg.de/';
                  ?>

                  Comment


                  • #10
                    Wie kommst du zu char??

                    String sWert="3,15";
                    sWert=sWert.replaceAll(",",".");
                    double wert=Double.valueOf(sWert);



                    double x=
                    Christian

                    Comment


                    • #11
                      Zu der Frage:
                      Wie kommst du zu char??
                      so...
                      Code:
                      komma_temp=preis.text().toCharArray();
                              for(int i=0; i<komma_temp.length; i++){
                                  if(preis.getText().charAt(i)==','){
                                      komma_temp[i]='.';
                                  }                    
                              }
                      System.out.println(komma_temp);
                      Jetz hab ich mal den Vorschlag von eben versucht, und es klappt. :-)

                      Danke

                      Aber jetzt sagt mir mal warum der Code (s.o.) nicht funktioniert?
                      Zuletzt editiert von creator90; 04.10.2008, 21:41.
                      PHP Code:
                      <?php
                      echo 'http://acs-it-worx.de/';
                      echo 
                      'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
                      echo '-----------------------------------------------------------------';
                      echo 
                      'http://www.autoservice-asberg.de/';
                      ?>

                      Comment


                      • #12
                        keine Ahnung, aber obiges ist kürzer und das läuft hier

                        String sWert1="3,13";
                        char[] komma_temp1=sWert1.toCharArray();
                        for(int i=0;i<komma_temp1.length;i++)
                        {
                        if(sWert1.charAt(i)==',')
                        {
                        komma_temp1[i]='.';
                        }
                        }
                        String sWert2="3,14";
                        char[] komma_temp2=sWert2.toCharArray();
                        for(int i=0;i<komma_temp2.length;i++)
                        {
                        if(sWert2.charAt(i)==',')
                        {
                        komma_temp2[i]='.';
                        }
                        }
                        System.out.println(Double.valueOf(String.valueOf(k omma_temp1))<Double.valueOf(String.valueOf(komma_t emp2)));


                        kann an diesem Konstrukt liegen

                        Double.valueOf(String.valueOf(liste_gr.getItem()))
                        Christian

                        Comment


                        • #13
                          Double::compareTo

                          Hi,

                          habe mich erst angemeldet und weiss nicht, ob das hier noch hilft.
                          Wirf doch mal nen Blick auf die Methode compareTo
                          Code:
                          System.out.println("Vergleich ist "+
                          				(new Double(Double.parseDouble(sWert1.replace(',', '.'))))
                          				.compareTo(new Double(Double.parseDouble(sWert2.replace(',', '.'))))
                          		);
                          Double a.compareTo(Double b) liefert
                          -1 wenn a < b
                          0 wenn a = b
                          1 wenn a > b
                          Achtung: -0.0 ist auch kleiner als +0.0

                          Comment

                          Working...
                          X