Formel umsetzen klappt nicht so recht

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Boolean.

    Formel umsetzen klappt nicht so recht

    Hallo :)

    Habe ein kleines Problem eine Formel als Code umzusetzen.
    Die Formel ist 1-(int1 * int2 * int3) ... (es können beliebig viele Werte übergeben werden.

    So sieht mein aktueller Source aus:
    Sieht da jemand den Fehler? Vielleicht bin ich einfach zu blöd, aber ich meine das sollte so funktionieren. Wenn ich aber mit Werten <20 oder so teste dann kommt ein garantiert falsches Ergebniss raus.. Hoffe jemand kann mir da helfen.

    VB.NET-Quellcode

    1. Dim dblCalc As Double = 0
    2. If _modList.Count = 0 Then
    3. Throw New Exception
    4. End If
    5. For Each intAmount As Integer In _modList
    6. If dblCalc = 0 Then
    7. dblCalc = intAmount / 100
    8. Else
    9. dblCalc = dblCalc * (intAmount / 100)
    10. End If
    11. Next
    12. _result = 1 - dblCalc
    13. Return _result


    Danke!!!
    ich sehe keinen zusammenhang zw. deiner Formel und dem Code-Snippet. In der Formel wird multipliziert, in deim Code dividiert.

    Wie wäre es, wenn du eine richtige Methode drumrum schreiben würdest?
    Dann wären so Sachen wie _modList, intAnmount, cblCalc, _result vlt. besser definiert.
    Das neutrale Element der Multiplikation ist 1.
    Dies wäre der Kern:

    VB.NET-Quellcode

    1. Dim dblCalc As Double = 1
    2. For Each intAmount As Integer In _modList
    3. dblCalc = dblCalc * (intAmount / 100)
    4. Next
    5. _result = 1 - dblCalc
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ErfinderDesRades schrieb:

    ich sehe keinen zusammenhang zw. deiner Formel und dem Code-Snippet. In der Formel wird multipliziert, in deim Code dividiert.

    VB.NET-Quellcode

    1. dblCalc = dblCalc * (intAmount / 100)


    ErfinderDesRades schrieb:

    Wie wäre es, wenn du eine richtige Methode drumrum schreiben würdest?
    Dann wären so Sachen wie _modList, intAnmount, cblCalc, _result vlt. besser definiert.

    Das ganze ist eine Klasse

    RodFromGermany schrieb:

    Das neutrale Element der Multiplikation ist 1.
    Dies wäre der Kern:

    VB.NET-Quellcode

    1. Dim dblCalc As Double = 1
    2. For Each intAmount As Integer In _modList
    3. dblCalc = dblCalc * (intAmount / 100)
    4. Next
    5. _result = 1 - dblCalc

    Danke, damit spar ich mir zumindest die IF.
    So ganz korrekt funktioniert das noch nicht, aber die Formel scheint zu stimmen.. hab also irgendwo noch einen Denkfehler..

    // Edit: OK war nur ein Denkfehler drin, muss das zu übergebende Value zuerst noch ins negative ändern. Da kam halt der "verkehrte" Wert raus, darum dachte ich mir da ist ein Fehler... :whistling:

    Danke, Problem gelöst Thema erledigt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Boolean“ ()