Wpis z mikrobloga

Może być, czy coś zmienić? W ramach nauki, skrypt który podlicza na ile sztuk nas stać i ile zapłacimy:

"use strict"

const PODATEK = 0.23;
const CENA_SPRZETU_NETTO = 19.99;

var saldoWBanku = 200;
var iloscSztuk = 0;
var koszyk = 0;

var cenaBrutto = CENA_SPRZETU_NETTO + (CENA_SPRZETU_NETTO * PODATEK);

while (koszyk < (saldoWBanku - cenaBrutto)) {
koszyk += cenaBrutto;
iloscSztuk += 1;
}

console.log("Stać cię na: " + iloscSztuk + " sztuk.")
console.log("Zapłacisz: " + koszyk.toFixed(2) + "PLN.")

#naukaprogramowania #javascript
  • 9
  • Odpowiedz
kodujemy po angielsku, CENASPRZETUNETTO zamiast var to let możńa to uprościć do
iloscSztuk = Math.floor(saldoWBanku / cenaBrutto )
zaplacisz = iloscSztuk * cenaBrutto
  • Odpowiedz
@michal42: Zdecydowanie zalecam NIGDY nie korzystać z matematyki js na liczbach zmiennoprzecinkowych, a szczególnie wtedy, gdy dotyczy to pieniędzy.
Popularny pattern, bez wykorzystania specjalnych bibliotek, polega na oddzieleniu części przed i po przecinku na 2 osobne liczby. Możesz to ubrać w osobną klasę, napisać do niej testy jednostkowe i masz dobry case do nauki.

  • Odpowiedz
@niepodszywamsiepodbiauka: Wydaje mi się, że można też liczbę traktować jako całkowitą tj. 600.90 na 60090? Wtedy przy zwykłym dodawaniu, odejmowaniu czy mnożeniu nie powinno być problemu. Gorzej przy bardziej skomplikowanych obliczeniach, wtedy to np. można użyć jakiegoś lekkiego frameworka.
  • Odpowiedz
Wydaje mi się, że można też liczbę traktować jako całkowitą tj. 600.90 na 60090?

@michal42: Można, ale musisz pilnować liczby miejsc po przecinku, a robienie tego ręcznie jest niewygodne.
Możesz zrobić klasę:

class MyNumber {

constructor (intPart, decimals) {...}

}

I teraz gdy chcesz zapisać 123.124 to robisz:

let number = new MyNumber(123124, 3) // 123.124

let number2 = new MyNumber(666, 0) // 666

let number3 = new MyNumber(543543, 6) //
  • Odpowiedz