Dino-BBG: Berechnungen mit JavaScript

problematische Seite

Hallo liebe Forumsmitglieder, 👋

ich bin derzeit dabei ein Projekt für mein Studium der Immobilienwirtschaft umzusetzen. Da ich mich in der Vergangenheit öfters mit HTML, CSS und JavaScript beschäftigt habe, kam ich auf die glorreiche Idee (ja, ich bereue es inzwischen 🐵) ein kleines Bewertungstool aufzubauen, welches anhand des Ertragswertverfahrens für die 50 größten Städte Deutschlands einen realistischen Wert der Immobilie ausspucken soll.

Nun zum Problem: Ich muss irgendwo einen Fehler im Hardcode haben, da mir meine JavaScript Function nur sinnlose Ergebnisse ausspuckt und ich vermute, dass es an der Berechnung des Vervielfältigers liegt. Daher kurz das Ertragswertverfahren zusammengefasst: Allgemeines und vereinfachtes Ertragswertverfahren Kurze Erörterung: Ich verwende das vereinfachte Ertragswertverfahren. Dabei wird der Jahresreinertrag (= Jahreskaltmiete - Bewirtschaftungskosten bzw. "BWK") mit einem Vervielfältiger "V" multipliziert, wobei "q" für den jeweiligen "Liegenschaftszinssatz + 1" steht und mit der "wirtschaftlichen Restnutzungsdauer" bzw. "RND" der Immobilie potenziert wird.

Die Formeln habe ich als Bild hinzugefügt, ist ja an sich selbsterklärend.

Ich habe folgenden Quellcode zusammengeschustert:

<div align="center">

<p> Bodenrichtwert (€/m²): </p>
<input type="text" id="bodenrichtwert">
<br />
<br />


<p> Wohnfläche in m²: </p>
<input type="text" id="wohnflaeche">
<br />
<br />


<p> Jährliche Bewirtschaftungskosten: </p> 
<input type="text" id="bewirtschaftungskosten">
<br />
<br />


<p> Wirtschaftliche Restnutzungsdauer in Jahren: </p>
<input type="text" id="restnutzungsdauer">
<br />
<br />


<p> Wertminderung: </p>
<input type="text" id="wertminderung">
<br />
<br />


<input type="button" value="Wert berechnen" onClick="immowertklein ()">
<br />
<br />
<big><big>
<p> Immobilienwert: </p>
<input type="text" id="immobilienwert">
</big></big>
<script type="text/jscript">
function immowertklein ()

{

var brw = document.getElementById("bodenrichtwert").value;

var wfl = document.getElementById("wohnflaeche").value;

var bew = document.getElementById("bewirtschaftungskosten").value;

var rnd = document.getElementById("restnutzungsdauer").value;

var wer = document.getElementById("wertminderung").value;

var ree = 11.71 * 12 * wfl - bew;

var bod = brw * wfl;

var ver = Math.pow(1.029,rnd);

var fae = ver - 1;

var tig = ver * 0.29;


var iwe = ree * (fae / tig) + (bod / ver) - wer;


iwe = iwe.toFixed(2);
document.getElementById("immobilienwert").value=iwe;
 
}

</script>
</div>

Wie gesagt, die Ergebnisse hauen keinesfalls auch nur annähernd hin und ich bin schon seit Tagen verzweifelt am grübeln und Suchen. Habe bereits zwei mal neu angesetzt und allmählich verzweifle ich...

Daher danke ich vielmals für jedwede Hilfe.

  1. problematische Seite

    Hallo Dino-BBG,

    Wie gesagt, die Ergebnisse hauen keinesfalls auch nur annähernd hin und ich bin schon seit Tagen verzweifelt am grübeln und Suchen.

    Da ist es hilfreich sich die (alle!) Zwischenergebnisse und Eingabewerte anzuschauen.

    console.log("Zwischenergebnis")

    Daher danke ich vielmals für jedwede Hilfe.

    Allerdings ist auch dein HTML dringend überarbeitungswürdig, schon allein aus Gründen der Barrierefreiheit. Die Beschriftungen der input-Elemente müssen mit einem label-Element erfolgen. Der Immobilienwert wird ja nicht eingegeben, sondern ausgegeben. Das korrekte Element wäre also ein output-Element.

    Die Gestaltung solltest du nicht mit veralteten Attributen wie align oder falsch verwendeten Elementen wie br regeln, sondern über CSS. Im Wiki solltest du auch da fündig werden. Zum JavaScript selbst können andere hier viel mehr beitragen.

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  2. problematische Seite

    Moin,

    nur mal so ein Gedanke:"Könnte es sein, das JS die Rechenregel nicht richtig umsetzt?" Also, das Du vielleicht ein paar mehr Klammern brauchst?

    Nur so ein spontaner Gedanke.

    Gruß HEiko

    1. problematische Seite

      Hallo,

      Also, das Du vielleicht ein paar mehr Klammern brauchst?

      Das war auch mein 1. Gedanke, aber das Problem scheint dadurch umgangen worden zu sein, dass mit vielen Variablen gearbeitet wurde.

      Wie siehst denn mit den Einheiten aus? Wenn man sich da vertut…

      Gruß
      Kalk

  3. problematische Seite

    Hallo Dino-BBG,

    ein paar Grundsatzhinweise zu JavaScript. Das Problem dürfte aber anderswo liegen, siehe weiter unter.

    • Variablen sollte man analog zu den Symbolen in seiner Formelsammlung benennen ODER vor jede Variablenzuweisung einen Kommentar setzen, der kurz angibt, was hier gespeichert ist. Das würde einem Helfer das Leben sehr erleichtern.
    • Verwende keine magischen Konstanten. Außer var gibt es in JavaScript auch die Anweisung const, mit der sich benannte Konstanten erstellen lassen. Bei der 12 würde ich keine Konstante erzeugen, bei 11,79 und 0,29 (lz) schon, und statt 1,029 sollte dann 1 + lz geschrieben werden.
    • Vielleicht wäre es auch besser, die Nettoquadratmetermiete und den Liegenschaftszins als Eingabe bereitzustellen. Dabei musst Du aufpassen, du musst bei Dezimalwerten einen Dezimalpunkt eingeben, oder vorher mit der replace-Methode Kommas in Punkte umwandeln, bevor Du den String mit parseFloat in eine Fließkommazahl umwandelst
    • Numerische Eingaben sollte man vor der Verarbeitung mit parseInt oder parseFloat in Zahlen umwandeln. Und man sollte sie eigentlich auch vorher validieren. Ist das eine Zahl, ist sie positiv?
    • Lerne debuggen. Entweder mit console.log(), oder mit dem Sourcecode-Debugger der Entwicklerwerkzeuge im Browser. So kannst Du jeden Teilschritt der Rechnung überprüfen
    • Liefere Testdaten. Welche Eingaben machst Du, welche Ausgabe erwartest Du? Da Du das EW-Verfahren erläutert hast, gehst Du ja davon aus, dass das Verfahren hier nicht bekannt ist (zu Recht).

    Und dann:

    • Liefere Quellen. Woher kommt die Formel? Hast Du die selbst zusammengestellt oder ist die aus einem Lehrbuch? In der Wikipedia steht sie nicht, da findet sich nur Text.

    Aber ich habe einmal gegoogelt und das hier gefunden. Das kann ich Schritt für Schritt nachvollziehen und komme damit auf deine erste Formel. Die zweite Formel ergibt sich aus der ersten durch rein algebraische Umstellung und sollte daher den gleichen Wert liefern.

    Was mir auffällt:

    • Du hast den Bodenrichtwert als Eingabe und multiplizierst ihn mit der Wohnfläche. Dieser Wert ist sinnlos. Der Bodenrichtwert ist der Grundstückspreis pro Quadratmeter, den musst du mit der Grundstücksfläche multiplizieren, um den Bodenwert zu erhalten. Im Bergfürstbeispiel sind Wohnfläche und Grundstücksfläche gleich, aber nicht jeder hat einen Bauwi(s)ch von 0 oder baut einen Turm mit 5 Geschossen. Bei meinem Haus ist die Grundfläche das 2,5-fache der Wohnfläche.
    • Die Bewirtschaftungskosten gibst Du ein. Bei Bergfürst steht, man könne sie mit 25% des Jahresrohertrags ansetzen. Dementsprechend müsste also deine Werteingabe sein. Lag deine Eingabe in dieser Größenordnung?
    • Du rechnest mit Liegenschaftszinsen von 29%. Das ist immens. Ist das tatsächlich dein örtlicher LZ? Bergfürst verwendet 5%.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. problematische Seite

      Lieber Rolf, du hast die Lösung gefunden :-D

      Der Liegenschaftszins betrug 2,9% und ich muss bei der Eingabe versehentlich anstelle von 0,029 mit 0,29 multipliziert haben :-)

      VIELEN VIELEN DANK!!!

      Zur Erörterung des Ertragswertvehrens:

      Es ist tatsächlich sinnvoll bei Wohnungen in Mehrfamilienhäusern, worauf sich dieses Beispiel bezieht, den Bodenrichtwert aus der Bodenrichtwertkarte des regionalen Gutachterausschusses mit der Wohnfläche der zu bewertenden Wohnung zu multiplizieren und dieses Produkt wiederum mit der am Markt erzielbaren üblichen Miete (in diesem Fall laut Grundstücksmarktbericht von Aachen 11,71€/m²) zu multiplizieren und das ganze wiederum verzwölffachen, da der Jahresrohertrag ermittelt werden soll. Anschließend zieht man hiervon die jährlichen Bewirtschaftungskosten ab und erhält den Jahresreinertrag.

      Die von dir angesprochene Problematik mit den Einfamilienhäusern ist durchaus vorhanden, denn schließlich würde man in diesem Fall so handeln, als wäre das gesamte Grundstück samt Garten vermietbare Wohnfläche, allerdings wendet man daher bei Einfamilienhäusern auch vorzugsweise das Sachwertverfahren an.

      Um es kurz zu machen: Lieber Rolf, du bist der KLASSE und ich danke dir vielmals, denn ich habe diesen Fehler nunmehr 30 mal überlesen und wundere mich über meine eigene Dummheit :-D

      1. problematische Seite

        Hallo Dino,

        und wundere mich über meine eigene Dummheit

        Warum soll es Dir anders gehen als uns? :)

        Aber die Ursache für den Fehler ist, dass Du den LZ Prozentsatz direkt verrechnet hast statt ihn einzugeben oder als separate Konstante festzulegen. Dann wäre es Dir sicherlich sofort aufgefallen.

        Mein Mathelehrer (Leibnitz hab ihn selig) meinte immer: Ein Beweis (oder hier: eine Berechnung) ist wie eine gute Salami. Je dünner die Scheiben, desto besser.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. problematische Seite

          Hallo Rolf,

          und wundere mich über meine eigene Dummheit

          Warum soll es Dir anders gehen als uns? :)

          wie wahr ...

          Mein Mathelehrer (Leibnitz hab ihn selig)

          Leibnitz ... das war doch der mit den 52 Zähnen. 😉

          meinte immer: Ein Beweis (oder hier: eine Berechnung) ist wie eine gute Salami. Je dünner die Scheiben, desto besser.

          Bei der Salami bin ich nicht dieser Meinung. Eine Salamischeibe sollte schon so dick sein, dass man sie beim Draufbeißen auch deutlich spürt. Aufschnitt so dünn schneiden, dass man das Vaterunser durchpusten kann? Och nöö!

          Live long and pros healthy,
           Martin

          --
          Home is where my beer is.
          1. problematische Seite

            @@Der Martin

            Bei der Salami bin ich nicht dieser Meinung. Eine Salamischeibe sollte schon so dick sein, dass man sie beim Draufbeißen auch deutlich spürt. Aufschnitt so dünn schneiden, dass man das Vaterunser durchpusten kann? Och nöö!

            Das S in MNS steht nicht für Salami. 😆

            😷 LLAP

            --
            „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
          2. problematische Seite

            Hi,

            Leibnitz ... das war doch der mit den 52 Zähnen. 😉

            Ne, der mit den 52 Zähnen ist Stefan Raab 😉

            cu,
            Andreas a/k/a MudGuard

            1. problematische Seite

              @@MudGuard

              Hi,

              Leibnitz ... das war doch der mit den 52 Zähnen. 😉

              Ne, der mit den 52 Zähnen ist Stefan Raab 😉

              Da fällt mir gleich der wieder ein:

              Was ist das: hat 4 Beine und 44 Zähne?
              Ein Krokodil.
              Und was ist das: hat 44 Beine und 4 Zähne?
              Das Politbüro des ZK der SED.

              😷 LLAP

              --
              „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
              1. problematische Seite

                Hallo

                Leibnitz ... das war doch der mit den 52 Zähnen. 😉

                Ne, der mit den 52 Zähnen ist Stefan Raab 😉

                Da fällt mir gleich der wieder ein:

                Was ist das: hat 4 Beine und 44 Zähne?
                Ein Krokodil.
                Und was ist das: hat 44 Beine und 4 Zähne?
                Das Politbüro des ZK der SED.

                Nicht ganz so politisch: Was hat fünf Beine und zwei Ohren?

                Tschö, Auge

                --
                Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
                Hohle Köpfe von Terry Pratchett
                1. problematische Seite

                  Hi,

                  Leibnitz ... das war doch der mit den 52 Zähnen. 😉

                  Ne, der mit den 52 Zähnen ist Stefan Raab 😉

                  Da fällt mir gleich der wieder ein:

                  Was ist das: hat 4 Beine und 44 Zähne?
                  Ein Krokodil.
                  Und was ist das: hat 44 Beine und 4 Zähne?
                  Das Politbüro des ZK der SED.

                  Nicht ganz so politisch: Was hat fünf Beine und zwei Ohren?

                  fast jedes männliche Säugetier?

                  cu,
                  Andreas a/k/a MudGuard

                  1. problematische Seite

                    Hallo

                    Leibnitz ... das war doch der mit den 52 Zähnen. 😉

                    Ne, der mit den 52 Zähnen ist Stefan Raab 😉

                    Da fällt mir gleich der wieder ein:

                    Was ist das: hat 4 Beine und 44 Zähne?
                    Ein Krokodil.
                    Und was ist das: hat 44 Beine und 4 Zähne?
                    Das Politbüro des ZK der SED.

                    Nicht ganz so politisch: Was hat fünf Beine und zwei Ohren?

                    fast jedes männliche Säugetier?

                    Nee, das ist geschlechtsunspezifisch.

                    Tschö, Auge

                    --
                    Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
                    Hohle Köpfe von Terry Pratchett
                2. problematische Seite

                  Hi,

                  Nicht ganz so politisch: Was hat fünf Beine und zwei Ohren?

                  der Mensch? - Rechtes Bein, linkes Bein, Nasenbein, Steißbein, Brustbein?
                  Verdammt. Ich hab die Schlüsselbeine völlig vergessen.

                  Live long and pros healthy,
                   Martin

                  --
                  Home is where my beer is.
                3. problematische Seite

                  Hallo Auge,

                  du willst jetzt hoffentlich keine geschmacklosen Scherze über Kampfhunde machen?

                  Rolf

                  --
                  sumpsi - posui - obstruxi
                  1. problematische Seite

                    Hallo

                    du willst jetzt hoffentlich keine geschmacklosen Scherze über Kampfhunde machen?

                    Da ein Dobermann auf einem Spielplatz kein Kampfhund ist, nein.

                    Tschö, Auge

                    --
                    Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
                    Hohle Köpfe von Terry Pratchett
                    1. problematische Seite

                      Hallo Auge,

                      wenn er 5 Beine hat, würde ich darüber nochmal nachdenken wollen. Und hoffentlich ist's ein Puppenbein.

                      Rolf

                      --
                      sumpsi - posui - obstruxi
          3. problematische Seite

            Aufschnitt so dünn schneiden, dass man das Vaterunser durchpusten kann?

            Stichwort: Homöopathie, besonders wertvoll beim Abnehmen der Körpermasse.

            1. problematische Seite

              Hallo,

              Aufschnitt so dünn schneiden, dass man das Vaterunser durchpusten kann?

              Stichwort: Homöopathie

              im kulinarischen Bereich auch Carpaccio.
              Schön anzuschauen, aber so wenig Substanz, dass man es nicht einmal schmeckt.

              besonders wertvoll beim Abnehmen der Körpermasse.

              Wenn man das nicht durch eine erhöhte Zufuhr anderer Ingredienzen ausgleicht.

              Live long and pros healthy,
               Martin

              --
              Home is where my beer is.
      2. problematische Seite

        Hallo Dino,

        ich bin versehentlich auf den Button "–1" gekommen und wollte dich — alle herhören — keineswegs negativ bewerten!

        Bem. 1: Ich weiß nicht ob bzw. wie der Bewertende seine Bewertung korrigieren kann.

        Bem. 2: Ich hasse das Tippen auf Touch-Screens...

        Viele Grüße und sorry!
        ottogal

        1. problematische Seite

          @@ottogal

          Ich weiß nicht ob bzw. wie der Bewertende seine Bewertung korrigieren kann.

          Nochmal auf − drücken sollte die Bewertung rückgängig machen.

          😷 LLAP

          --
          „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
    2. problematische Seite

      Hallo Rolf,

      • Numerische Eingaben sollte man vor der Verarbeitung mit parseInt oder parseFloat in Zahlen umwandeln. Und man sollte sie eigentlich auch vorher validieren. Ist das eine Zahl, ist sie positiv?

      ich nehme da <input type="number"> und valueAsNumber. Danach prüfe ich noch mit isNaN

      Gruß
      Jürgen

  4. problematische Seite

    Um dir beim suchen zu helfen, wäre es gut wenn du ein Beispiel angibst.
    Was gibst du ein, was kommt bei dir raus und was hast du erwartet? Am besten mit Zwischenschritten.

  5. problematische Seite

    @@Dino-BBG

    Ich habe folgenden Quellcode zusammengeschustert:

    So sieht er auch aus.

    <div align="center">
    
    <p> Bodenrichtwert (€/m²): </p>
    <input type="text" id="bodenrichtwert">
    

    Das Eingabefeld hat keine Beschriftung. Da ist zwar was, was in dessen Nähe steht; verknüft ist das aber nicht.

    So geht’s:

    <div align="center">
    
    <p><label for="bodenrichtwert">Bodenrichtwert (€/m²):</label></p>
    <input type="text" id="bodenrichtwert">
    

    So als Quickfix. Das <p>-Element brauchst du nicht; du kannst auch das label entsprechend stylen (u.a. display: block).

    Bei den anderen Eingabefeldern entsprechend. Der Wert des for-Attributs muss mit der ID des Eingabefelds übereinstimmen.

    Wichtig insbesondere für Nutzer (m/w/d), die die Seite nicht visuell wahrnehmen. S.a. HTML/Formulare/label

    Leider haben sich hier alle auf das JavaScript gestürzt ohne auf die Grundlagen einzugehen.


    Eine Klasse "center" sollte es auch nicht geben. Das ist präsentationsbezogenes Markup; dann könntest du auch gleich das <center>-Element nehmen.

    <br />
    <br />
    

    Du Henry, was ist für ein Geräusch?

    Abstände machst du mit CSS: margin.

    😷 LLAP

    --
    „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
    1. problematische Seite

      Hallo Gunnar,

      Leider haben sich hier alle auf das JavaScript gestürzt ohne auf die Grundlagen einzugehen.

      Das sah ich anders - wenn das auch nicht so ausführlich war wie bei Dir jetzt.

      Darum habe ich mich dann auf die Businesslogik gestürzt. War schon umfangreich genug.

      Rolf

      --
      sumpsi - posui - obstruxi
      1. problematische Seite

        @@Rolf B

        Das sah ich anders

        Huch, ich könnt schwören, eben war Matthias’ Posting noch nicht da. 😉

        😷 LLAP

        --
        „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
        1. problematische Seite

          Hallo Gunnar,

          das kommt davon wenn jemand mit Salami um sich schmeißt und sich alle drauf stürzen...

          Rolf

          --
          sumpsi - posui - obstruxi