Kasvatusarvon laskeminen

Tuoteoston yhteydessä yhdellä napautuksella saatavien sitruunoiden määrä muuttuu. Seuraavaksi toteutamme koodin, joka laskee uuden kasvatusarvon. Uusi kasvatusarvo lasketaan Laskukaavat-sivun periaatteiden mukaisesti. Samalla laskemme ostettujen tuotteiden yhteislukumäärän.

Muokkaa src-kansion App.jsx-tiedostossa olevaa handlePurchase-funktiota. Korvaa // TODO lasketaan uusi kasvatusarvo-rivi seuraavilla riveillä:

      // Koostemuuttujien esittely.
      let increase = 1;
      let upgrades = 0;
      // Käydään tuotteet yksitellen lävitse.
      for (let i=0; i<storeitems.length; i++) {
        // Lisätään tuotteiden määrä kokonaismäärään.
        upgrades = upgrades + storeitems[i].qty;
        // Lisätään tuotteen vaikutus kasvatusarvoon.
        increase = increase + storeitems[i].multiplier*storeitems[i].qty;
      }
      // Tallennetaan lasketut koostearvot.
      newstats.increase = increase;
      newstats.upgrades = upgrades;

Tämän lisäyksen jälkeen sovellus laskee uuden kasvastusarvon tuotteen oston yhteydessä.

Yhdellä napautuksella saatavien sitruunoiden määrä lasketaan ostosten perusteella

Joissain tilanteissa sitruunoiden lukumäärä saattaa pitkänä desimaaliarvona. Tämä johtuu siitä, että kasvatusarvo on tietyissä tilanteissa liukuluku, joka on JavaScriptin näkökulmasta likiarvo. Jotta sovellus ei näytä pitkää desimaalimuotoa, on luvut pyöristettävä.

Lukujen pyöristäminen

JavaScript ei sisällä valmista funktiota, jolla luvun voisi pyöristää tiettyyn desimaalimäärään. Toteutamme ensin yksinkertaisen funktion, joka suorittaa tämän pyöristämisen.

Luo src/utils-kansioon uusi tiedosto, anna sen nimeksi round.js ja laita sen sisällöksi seuraava ohjelmakoodi:

// Pyöristää luvun määriteltyyn tarkkuuteen.
function round(value, precision) {
  const multiplier = Math.pow(10, precision || 0); 
  return Math.round(value * multiplier) / multiplier;
}

export default round;

Muokkaa src-kansion App.jsx-tiedostoa seuraavasti:

  • Lisää tiedoston alkuun seuraava import-tuonti:

    import round from './utils/round';
    
  • Muokkaa handleClick-funktion sisällä oleva balance-arvon laskenta seuraavanlaiseksi:

        newstats.balance = round(newstats.balance + newstats.increase,1);
    
  • Muokkaa handlePurchase-funktion sisällä oleva balance-arvon laskenta seuraavanlaiseksi:

          newstats.balance = round(newstats.balance - newstoreitems[index].price,1);
    

Nämä lisäykset pyöristävät lasketut balance-arvot yhden desimaalin tarkkuuteen.

Lukujen pyöristys toteutettu

Muutosten vienti versiohallintaan

Viedään viimeisimmät muutokset versiohallintaan.

git add .
git commit -m "lisää kasvatusarvon laskennan ja  pyöristyksen"

lisää kasvatusarvon laskennan ja pyöristyksen -commit