Ankündigung

Einklappen
Keine Ankündigung bisher.

[JS] hää? js zu dumm zum rechnen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [JS] hää? js zu dumm zum rechnen?

    Code:
    script type="text/javascript">
    function neu(text)
    {
    	document.alf.preis.value=text*1.2;
    	sum();
    }
    function neu1(text) 
    {
    	document.alf.preis1.value=text*4.2;
    	sum();
    }
    function sum()
    {
    	one = parseFloat(document.alf.preis.value);
    	two = parseFloat(document.alf.preis1.value);
    	document.alf.sum.value=one+two;
    }
    </script>
    
    
    <form name="alf">
      <select size="1" name="opt" onChange="neu(this.value);">
      <option value="1" selected>1 Stück</option>
      <option value="2">2 Stück</option>
      <option value="3">3 Stück</option>
      </select>
    Preis:<input type="text" name="preis" size="8" value="1"readonly  style="border-width:0px;">
    
    
      <select size="1" name="opt" onChange="neu1(this.value);">
      <option value="1" selected>1 Stück</option>
      <option value="2">2 Stück</option>
      <option value="3">3 Stück</option>
      </select>
    Preis:<input type="text" name="preis1" size="8" value="4"readonly  style="border-width:0px;">
    
    
    
    Summe:<input type="text" name="sum" size="8" value="5"readonly  style="border-width:0px;">
    </form>
    wieso zum teufel sind 1*1.2=1.2 und 2*1.2=2.4 ABER 3*1.2=3.5999999999999996 ???

    HILFE

    Gruß CyCap


  • #2
    Bei Float kommen schonmal Ungenauigkeiten vor, die sind aber meist so gering, dass man den Fehler durch Runden wieder ausgebügelt bekommt.

    Kommentar


    • #3
      Bei Float kommen schonmal Ungenauigkeiten vor, die sind aber meist so gering, dass man den Fehler durch Runden wieder ausgebügelt bekommt

      der datentyp float ist zu dem zeitpunkt noch gar nicht festgelegt

      Kommentar


      • #4
        Code:
        <script type="text/javascript">
        function neu(text)
        {
        	document.alf.preis.value=(Math.round((text*1.2)/0.01)*0.01);
        	sum();
        }
        function neu1(text) 
        {
        	document.alf.preis1.value=(Math.round((text*4.2)/0.01)*0.01); 
        	sum();
        }
        function sum()
        {
        	one = parseFloat(document.alf.preis.value);
        	two = parseFloat(document.alf.preis1.value);
        	document.alf.sum.value=one+two;
        }
        </script>
        
        
        <form name="alf">
          <select size="1" name="opt" onChange="neu(this.value);">
          <option value="1" selected>1 Stück</option>
          <option value="2">2 Stück</option>
          <option value="3">3 Stück</option>
          </select>
        Preis:<input type="text" name="preis" size="8" value="1"readonly  style="border-width:0px;">
        
        
          <select size="1" name="opt" onChange="neu1(this.value);">
          <option value="1" selected>1 Stück</option>
          <option value="2">2 Stück</option>
          <option value="3">3 Stück</option>
          </select>
        Preis:<input type="text" name="preis1" size="8" value="4"readonly  style="border-width:0px;">
        
        
        
        Summe:<input type="text" name="sum" size="8" value="5"readonly  style="border-width:0px;">
        </form>
        für die die es interessier: das ist die lösung mit runden^^

        Kommentar


        • #5
          doch. Da Zahlen mit Nachkommastellen bei JS standartmäßig floats sind, wird auch das Ergebnis als Float gewertet (Float*Int = Float)

          Kommentar


          • #6
            Als Nachtrag:

            [JS] hää? js zu dumm zum rechnen?
            damit kannst du dir schnell ein Eigentor schießen:
            http://www.lugbz.org/documents/smart...l#dontclaimbug

            Code:
            function neu(text)
            {
               document.alf.preis.value=(Math.round((text*1.2)/0.01)*0.01);
               sum();
            }
            function neu1(text)
            {
               document.alf.preis1.value=(Math.round((text*4.2)/0.01)*0.01);
               sum();
            }
            Sowas ist Unfug: Wie du sicherlich gemerkt hast, musstest du Code doppelt ändern. Wie wärs mit:
            Code:
            function setPrice(outputFieldName, fieldValue)
            {
              document.forms['alf'].elements[outputFieldName].value = roundedFloatProduct(fieldValue, 1.2);
            }
            function roundedFieldProduct(one, two)
            {
              return (Math.round((one*two)/0.01)*0.01);
            }
            Aufruf erfolgt nun per onChange="setPrice('preis', this.value)" bzw. onChange="setPrice('preis1', this.value)"

            Kommentar


            • #7
              das nenn ich ne vereinfachung! vielen dank

              Kommentar


              • #8
                hmm bei dem code passiert gar nichts mehr^^

                Kommentar


                • #9
                  ahh roundedFLOATproduct und roundedFIELDproduct

                  Kommentar


                  • #10
                    Code:
                    <script type="text/javascript">
                    function setPrice(outputFieldName, fieldValue , Price) 
                    { 
                      document.forms['alf'].elements[outputFieldName].value = roundedFieldProduct(fieldValue, Price); 
                      sum();
                    } 
                    function roundedFieldProduct(one, two) 
                    { 
                      return (Math.round((one*two)/0.01)*0.01); 
                    }
                    function sum()
                    {
                    	eins = parseFloat(document.alf.preis.value);
                    	zwei = parseFloat(document.alf.preis1.value);
                    	document.alf.sum.value=(Math.round((eins+zwei)/0.01)*0.01);
                    }
                    </script>
                    
                    
                    <form name="alf">
                      <select size="1" name="opt" onChange="setPrice('preis',this.value, 1.2);">
                      <option value="1" selected>1 Stück</option>
                      <option value="2">2 Stück</option>
                      <option value="3">3 Stück</option>
                      </select>
                    Preis:<input type="text" name="preis" size="8" value="4.2"readonly  style="border-width:0px;">
                    
                    
                      <select size="1" name="opt2" onChange="setPrice('preis1',this.value, 2.55);">
                      <option value="1" selected>1 Stück</option>
                      <option value="2">2 Stück</option>
                      <option value="3">3 Stück</option>
                      </select>
                    Preis:<input type="text" name="preis1" size="8" value="1.2"readonly  style="border-width:0px;">
                    
                    
                    
                    Summe:<input type="text" name="sum" size="8" value="2.55"readonly  style="border-width:0px;">
                    </form>
                    was is jetzt noch falsch das bei opt2 value=1 2.5500000000000002 rauskommt? und bei value=2 5.1000000000000005

                    bei value=3 hingegen kommt 7.65 raus

                    Kommentar


                    • #11
                      kann mir denn keiner helfen??

                      Kommentar


                      • #12
                        Fünf Posts hintereinander. Das ist ja rekordverdächtig!

                        Pass' auf, dass Du Dich nicht überschlägst...

                        Zitat von cycap
                        was is jetzt noch falsch das bei opt2 value=1 2.5500000000000002 rauskommt? und bei value=2 5.1000000000000005

                        bei value=3 hingegen kommt 7.65 raus
                        Nebenbei bemerkt hat ein klein wenig Eigeninitiative noch niemandem geschadet!

                        Kommentar


                        • #13
                          Fünf Posts hintereinander. Das ist ja rekordverdächtig!

                          Pass' auf, dass Du Dich nicht überschlägst...
                          ich kann ja nix dafür das keiner mit mir redet

                          Nebenbei bemerkt hat ein klein wenig Eigeninitiative noch niemandem geschadet!
                          ja verdammt wozu gibts denn nen rundungsfunktion wenn die nicht immer tut was man ihr sagt?

                          Kommentar


                          • #14
                            muss ich jetzt schon wieder mit mir selbst reden?

                            Kommentar

                            Lädt...
                            X