Vilken App eller hur hade du löst detta

Diskussion i 'Applikationer' startad av Mini12, 3 jun 2022.

  1. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Jag har rättat koden nu och nu fungerar den.

    Du hade gjort en hel del misstag som du kanske kan se om du tittar igenom koden som jag har lagt in nedan om du jämför med det du la upp i jsfiddle, en massa taggar var felaktiga, du hade inte lagt in uträkningen i en funktion, det var ett antal felaktigheter i uträkningarna osv osv.

    Det du behöver göra nu är att lägga in taggar för resultaten (det är bara två inlagda från din kod) och det har jag gjort med <span>-taggar som du kan se.
    Kod:
    <!DOCTYPE html>
    
    <html lang="sv" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8" />
        <title>Dags att spara pengar </title>
    </head>
    <body>
    
        <p><b>Lill Eriks El-Bils Kalkyl</b></p>
        <br /><br />
        <script type="text/javascript">
            calculate();
            function calculate() {
                try {
                    var a = parseFloat(document.getElementById('a').value.replace(',', '.'));
                    var b = parseFloat(document.getElementById('b').value.replace(',', '.'));
                    var c = parseFloat(document.getElementById('c').value.replace(',', '.'));
                    var d = parseFloat(document.getElementById('d').value.replace(',', '.'));
                    var e = parseFloat(document.getElementById('e').value.replace(',', '.'));
                    var f = parseFloat(document.getElementById('f').value.replace(',', '.'));
                    var g = parseFloat(document.getElementById('g').value.replace(',', '.'));
                    var h = parseFloat(document.getElementById('h').value.replace(',', '.'));
                    var i = parseFloat(document.getElementById('i').value.replace(',', '.'));
                    var j = parseFloat(document.getElementById('j').value.replace(',', '.'));
    
                    document.getElementById('z').innerHTML = (e * (f * g)).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('q').innerHTML = (e * (f * g) + h + i).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('x').innerHTML = (a * b).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('y').innerHTML = (c + d + (a * (b * e))).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('p').innerHTML = (a * b * e).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('m').innerHTML = (a * b * e).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('M5').innerHTML = (a * b * e).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                    document.getElementById('P5').innerHTML = (a * b * e).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
                }
                catch (err) {
                    alert(err.message);
                }
            }
        </script>
        <table>
            <tr>
                <th colspan="2">
                    Nuvarande fosilbil
                </th>
            </tr>
            <tr>
                <td>
                    <label for="a">Skriv in Dags Aktuellt Bränslepris:</label>
    
                </td>
                <td>
                    <input type="number" id="a" value="24" oninput="calculate();">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="b">Vad drar er bil i dag:</label>
                </td>
                <td>
                    <input type="number" id="b" value="25" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="c">Bilskatt:</label>
                </td>
                <td>
                    <input type="number" id="c" value="500" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="d">Kostnad för Service o Rep:</label>
                </td>
                <td>
                    <input type="number" id="d" value="25" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="e">Körsträcka per år:</label>
                </td>
                <td>
                    <input type="number" id="e" value="25" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="x">Bränsle kostnad per år ::</label>
                </td>
                <td>
                    <span name="x" /><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="y" style="font-size:20px;color:red"> <b>Toal kostnad per år</b> ::</label>
                </td>
                <td>
                    <b><span name="y" /></b>
                </td>
            </tr>
        </table>
        <br /><br /><br />
        <table>
            <tr>
                <th colspan="2">
                    Er nya El-bil ️
                </th>
            </tr>
            <tr>
                <td>
                    <label for="f">Skriv in elpris ink nätavgift:</label>
    
                </td>
                <td>
                    <input type="number" id="f" value="1.3" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="g">Elbilens förbrukning:</label>
                </td>
                <td>
                    <input type="number" id="g" value="1.4" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="h">Bilskatt:</label>
                </td>
                <td>
                    <input type="number" id="h" value="360" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="i">Kostnad för Service o Rep:</label>
                </td>
                <td>
                    <input type="number" id="i" value="3500" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="j">Mängd gratisladdning i %:</label>
                </td>
                <td>
                    <input type="number" id="j" value="5" oninput="calculate();"><br /><br />
                </td>
            </tr>
            <tr>
                <td>
            </tr>
            <tr>
                <td>
                    <label for="z">El kostnad per år ::</label>
                </td>
                <td>
                    <span id="z" /><br /><br />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="q" style="font-size:20px;color:red"> <b>Toal kostnad per år</b> ::</label>
                </td>
                <td>
                    <span id="q" /><br /><br />
                </td>
        </table>
        <br />
        <br />
        <br />
        <style>
            table, th, td {
                border: 1px solid green;
            }
        </style>
    
        <h1>Jag Sparar per månad</h1>
    
        <table>
            <tr>
                <th>om jag bara laddar hemma</th>
                <th>laddar hemma och % gratis</th>
            </tr>
            <tr>
                <th>Ej i bruk ännu</th>
                <th>Ej i bruk ännu</th>
            </tr>
        </table>
        <br /><br /><br />
        <h1>Jag Sparar per År</h1>
    
        <table>
            <tr>
                <th>om jag bara laddar hemma</th>
                <th>laddar hemma och % gratis</th>
            </tr>
            <tr>
                <th><span name="p" /></th>
                <th>Fel uträkning</th>
            </tr>
        </table>
        <br /><br /><br />
    
    </body>
    
     
    Mini12 gillar detta.
  2. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Stort tack för all hjälp samt arbetet som du lagd ner "Heleg" .
    Har jobbat på att försöka färdigställa kalkylen, men har fastnat på att jag inte får den att räkna rätt.
    Första uträkningen är x= (a*b)*e (ex 25*0,6*e) men hur jag än gör så räknar den bara rätt om jag anger att "e" är =20 (dvs300)
    men sätter jag dit en nolla till (dvs e= 200) så blir svaret 3,00
    tar vi sedan att "e=2000" så blir svaret 30,00

    Vad kan vara problemet lägger jag in uträkningen fel eller
    Kod:
    document.getElementById('x').innerHTML = (a*(b*e)).toFixed(2).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
     
  3. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    har jobbat vidare, men valde att backa lite och fixa till de felkoder som visades när jag öppnade kalkylen.

    Men trots det står jag fortfarande still i sökandet efter orsaken att kalkylen räknar fel.

    Däremot har jag kunnat konstatera att samma fel är genom gående i hela kalkylen,
    dvs skriver jag in fler än 2 tecken så räknar den fel

    och tar jag samma beräkning som ovan a*b*e (där e=66) ger det ett svar på 990
    låter jag e= 67 så blir svaret 1,00

    Efter googlande och lite prövande så får jag kalkylen att räkna rätt med
    Kod:
    document.getElementById('x').innerHTML = ((a*b*e) .toFixed(2))//.toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    Är detta "rätt" väg att gå?
     
    Last edited: 9 jul 2022
  4. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Jag har inte hunnit titta på problemet, haft väldigt mycket att göra, ska se om jag hinner kolla i morgon. Jag har inte glömt bort dig.
     
  5. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Uträkningen ligger rätt men med den kommentar du lagt in så slutar inte satsen med ett semikolon, varje sats måste sluta med det.

    Sen skulle jag rekommendera att du lägger scriptet sist (eller åtminstone första anropet till calculate() inom <script>-taggarna), efter alla deklarationer av sidan, eftersom det utförs innan sidan visas och då blir det ett fel i körningen som gör att man inte får resultaten direkt.

    Ett sätt att testa en webbsida som man skrivit är att köra den i webbläsaren (fungerar bara i dator), högerklicka och välj Inspektera, under fliken Sources så kan man sätta brytpunkter i funktionen och inspektera värden för att se vad som händer i koden, här är en beskrivning av hur det går till, beskrivningen är för Chrome men det fungerar i stort sett likadant även i andra webbläsare.
     
  6. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Måste uträkningen avslutas med ett semikolon eller måste strängen göra det?

    Kod:
    document.getElementById('z').innerHTML = ((f*g*e).toFixed(2))//.toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    här avslutas strängen med ett semikolon men skulle jag behöva lägga in ett även efter uträkningen?


    fick ett felmeddelande tidigare som efter lite googling upplyste mig om det så där är jag i land nu

    Det jag just nu sitter och letar efter är möjligheten att minska summan med en angiven procent (%).

    har letat mig fram till funktionen "discount_pct" är det vad jag letar efter

    Här kan du se webbsidan som den såg ut innan du hjälpte mig med den enklare script varianten.

    och där kan du se "mängd gratisladdning" den procent satsen vill jag då dra ifrån "elkostnad per år".

    Innebär det att cellen "mängd gratisladdning" "märks ut" att det är just %
    eller är det något jag infogar i själva uträkningen?
     
  7. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Alla satser måste avslutas med ett semikolon.

    Jag googlade det, det är en variabel som någon har använt och ingen funktion.

    Procent betyder hundradel och kan enkelt användas genom att dividera den angivna procentsiffran med hundra, ex, 25% av 55 skriver du som 55*(25/100) så det är väldigt enkel matte.
     
  8. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Det tog ett tag innan polletten ramlade ner, då procentsatsen är en variabel som användaren av kalkylen anger. men ju mer jag funderar desto mer invecklad ser jag att uträkningen blir, den ser ut så här för tillfället och då har jag inte på långa vägar fått med alla uträkningar.

    Kod:
    document.getElementById('M5').innerHTML = (a*b*e)-(((f*g*e)-(f*g*e*(j/100))).toFixed(0))//.toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    där "j" är procent variabeln

    Min fundering är om det inte finns en möjlighet likt excel-ark att ange att värdet i en cell är %
     
  9. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Inte som i Excel men som sagt, dividera med 100 för att räkna med värdet som jag skrev ovan.
     
  10. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Ok, jag lyckades till sist få till raden så den räknade rätt.
    Nu försöker jag få den summan delat i 12
    Gissar att det är ganska simpelt, har du något råd att ge här.
    uträkningen ser ut så här
    Kod:
    (c+d+a*b*e)-(((f*g*e+h+i)-(f*g*e*(j/100)))
    prövade med att lägga till /12med ny() start o slut parentes att omsluta hela talet men icke
     
  11. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Kod:
    (((c + d + a * b * e) - ((f * g * e + h + i) - (f * g * e * j / 100)) / 12))
    Har testat och det fungerar!
     
  12. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Tack Heleg.
    dessvärre vart det inte rätt, eller rättare sagt uträkningen blir inte rätt.

    Summan av den sträng som jag la upp är 29 792 som sedan skulle delas med 12

    summan på den sträng som du hjälpte mig med blir 37 041
     
  13. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Kan du ge mig värdena för de olika variablerna så ska jag kolla!
     
  14. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    a=26
    b=0,6
    c=3000
    d=3500
    e=2000
    f=1,3
    g=1,4
    h=360
    i=5000
    j=30


    hela strängen ser ut så här.
    Kod:
    document.getElementById('m').innerHTML =
    (((c + d + a * b * e) - ((f * g * e + h + i) - (f * g * e * j / 100)) / 12))
    .toFixed(0))//.toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
     
  15. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    Du har lagt parenteserna fel så divisionen dividerar inte den första delen (dessutom var inte semikolonet med i slutet av satsen).

    Om du gör så här fungerar det:
    Kod:
    document.getElementById('m').innerHTML = ((((c + d + a * b * e) - ((f * g * e + h + i) - (f * g * e * j / 100))) / 12)).toFixed(0);
    
    Det är möjligt att man kan ta bort några parenteser (alla ser inte ut att behövas)...
     
  16. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Super duper tack Heleg :)
    hade aldrig lyckats få till den uträkningen, så det känns bra att vara klar med den biten.
    Nu funkar hela kalkylen som tänkt.

    skall nu "bara" fixa till lite estetiskt innan jag är klar
     
    Heleg gillar detta.
  17. Leo83

    Leo83 Android Apprentice Medlem

    Blev medlem:
    5 jan 2012
    Inlägg:
    4 813
    Mottagna gillanden:
    4 886

    MINA ENHETER

    Som någon som följt denna tråden i det tysta så ser jag framemot att se detta alster <3
     
    Mini12 och Heleg gillar detta.
  18. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Du får ge dig till tåls liiite till, men självklart läger jag upp en länk här när jag är klar :)

    Har fixat till lite blandade små saker som jag kunnat googlat fram.
    Men har nu fastnat på tusendels avgränsare, dvs att jag har 13 500 istället för 13500.
    har för mig att du hjälpte mig med det innan du visade på java.

    Vilket tagg använder jag för det och kan jag använda det för hela dokumentet eller anger man det för varje utpost?
     
  19. Heleg

    Heleg Professional Droid Medlem

    Blev medlem:
    5 feb 2016
    Inlägg:
    2 976
    Mottagna gillanden:
    2 099
    I slutet av varje beräkning ska du lägga in den här sekvensen.
    Kod:
    .toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    
    Så beräkningen kan se ut ex.vis så här:
    Kod:
    document.getElementById('m').innerHTML = ((((c + d + a * b * e) - ((f * g * e + h + i) - (f * g * e * j / 100))) / 12)).toFixed(0).toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    
    Det går ju även att skapa en funktion som gör samma sak så samma kod inte behöver skrivas för varje enskild rad, ex.vis så här...
    Kod:
    function formatNumber(number) {
    return number.toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    }
    
    Och den anropar du i så fall så här:
    Kod:
    document.getElementById('m').innerHTML = formatNumber(((((c + d + a * b * e) - ((f * g * e + h + i) - (f * g * e * j / 100))) / 12)).toFixed(0));
    
    Jag har inte orkat testköra koden, jag har så mycket att stå i ett antal veckor framöver, går in här ibland som avkoppling från det.
     
    frassedylan och Mini12 gillar detta.
  20. Mini12

    Mini12 Kid Droid Medlem

    Blev medlem:
    19 dec 2015
    Inlägg:
    89
    Mottagna gillanden:
    10
    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER

    MINA ENHETER

    Operatör:
    Wifog
    Telefon:
    Moto G7 POWER
    Jag lägger in det men utan resultat.
    Vad jag kan tycka är märkligt, är att för att få kalkylen att fungera måste jag lägga till 2st " /" -tecken efter "toFixed"för att kalkylen skall fungera.
    placerar jag semikolonet före dessa så får jag inte tecknet "aktiverat" (antar jag) då det skiftar till blått när jag istället lägger det bakom // -tecknen

    Raden ser ut så här,

    Kod:
    document.getElementById('z').innerHTML = ((f*g*e).toFixed(0))//;.toString().replace(/\B(?<!\.\d*)(?:(\d{3})+(?!\d))/g, ' ').replace(/[.]/, ',');
    Är det dessa (//) som ställer till det för tusentals avgränsningen,
    och att jag då även har något fel ytterligare för att kalkylen skall fungera