Announcement

Collapse
No announcement yet.

Prozent immer = 0 ?

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

  • Prozent immer = 0 ?

    Und nochmal huhu

    Ich möchte beim Datenkopieren einen Prozentbalken mitlaufen lassen...

    nun hab ich alle Dateigrößen zusammengezählt und hab auch in einer Variable wieviel bisher kopiert wurden...

    Wenn ich jetzt allerdings rechne:

    Code:
    zwi  =  speicherbisher/speichergeasamt*100;
    kommt immer 0 raus... egal ob ich Double oder long als Datentyp nehme... hab schon rumgegoogelt aber nüx gefunden.

    pls help

  • #2
    Hallo,

    auch wenn speicherbisher oder speichergeasamt ein double sind?

    Sonst gibts eine Integer-Division und dabei kommt 0 raus.


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

    Comment


    • #3
      Hallo,

      gfoidl hats schon erkannt, aber trotzdem die Antwort nochmal etwas ausführlicher. Wenn alle Zahlen in einer Division ganzzahlig sind (z.B. int oder long), dann führt Java eine ganzzahlige Division durch. Ich nehme mal an, dass "speicherbisher" und "speichergesamt" ganzzahlige typen sind. Da "speichergesamt" auch bestimmt größer "speicherbisher" ist, würde als Ergebnis 0,... rauskommen. Das wird bei einer ganzzahligen Division zu 0 reduziert. Das mit 100 malgenommen ergibt immer noch 0.

      Um das zu vermeiden, muss einer der Operanden ein gleitkommatyp sein (z.B. float). Das erreichst Du, indem Du entweder "speicherbisher" oder "speichergesamt" als gleitkomma definierst oder, indem Du in der Berechnung einen der beiden Werte nach float castest. z.B. so:
      zwi = (float)speicherbisher/speichergeasamt*100;

      ... hab schon rumgegoogelt aber nüx gefunden.
      Und das ist ja wohl glatt gelogen. Gib mal "java division" bei google ein. Gleich der erste Treffer erklärt das.

      Gruß ngomo
      http://www.winfonet.eu

      Comment


      • #4
        Kein Problem der Programmierung

        http://de.wikipedia.org/wiki/Prozentrechnung

        Mein Gesamtspeicher ist 4. Belegt habe ich 2

        Dann ist die Rechnung

        2*100/4

        und nicht

        2/4*100
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          ...
          2*100/4

          und nicht

          2/4*100
          Öhm mathematisch ist das genau das gleiche? Ergibt in beiden Fällen 50.

          2 * 100 /4 hat nur den Vorteil das aus dem ersten Term ( 2 * 100) ein großer Integer Term resultiert den ich auch wieder durch 4 teilen kann. Beim 2. Beispiel ergibt der erste Term 0,5 und wird damit zu 0, wodurch auch die Multiplikation nichts mehr bringt.
          Schreibe ich vor jede 2 ein (float) kommt genau das gleiche heraus. Bei Prozentwertberechnung würde ich das auf jeden Fall so machen.

          Wenn dann muss das 2. Beispiel so aussehen, damit auch ein anderes Ergebnis herauskommt:

          2 / ( 4 * 100)

          Folglich müsste man auch in der Programmiersprache Klammern angeben.

          Comment


          • #6
            Ja, hast Recht
            Zuletzt editiert von Christian Marquardt; 30.08.2010, 18:00.
            Christian

            Comment


            • #7
              Danke das mit dem Typ casten (float) funktioniert bestens

              Und das ist ja wohl glatt gelogen. Gib mal "java division" bei google ein. Gleich der erste Treffer erklärt das.
              Naja hab Java Prozentrechnen und Prozent funktionen gesucht...

              >>is nich gelogen :P

              Danke nochma an alle
              mfg Cracker0dks

              Comment


              • #8
                Naja hab Java Prozentrechnen und Prozent funktionen gesucht...

                >>is nich gelogen :P
                Sorry, war nicht bös gemeint. Auf die ganzahlige Division in Java bin ich ehrlich gesagt auch schon reingefallen.
                http://www.winfonet.eu

                Comment

                Working...
                X