• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

niepoprawne odróżnienie większości od mniejszości

Cloud VPS
+1 głos
610 wizyt
pytanie zadane 4 stycznia 2022 w JavaScript przez Jacek Śmiel Użytkownik (510 p.)
edycja 4 stycznia 2022 przez Jacek Śmiel

Witajcie,

staram się sprawdzić, czy wartość zmiennej let wartoscWyplaty nie jest większa od wartosci zmiennej let minDoWyplaty.

let minDoWyplaty = 17;

Niestety pojawia się dziwna dla mnie zależność, ponieważ skrypt działa i pokazuje poprawnie do pewnej wartości zmiennej, jeśli let wartoscWyplaty = 1.90 wszystko jest okej, ale jesli let wartoscWyplaty >= 2.00 wszystko przestaje działać...

        if(minDoWyplaty >= wartoscWyplaty) {
            console.log("Zlecono wyplate o wartosci: " + wartoscWyplaty + ", minimum do wyplaty aktualnie to: " + minDoWyplaty);
        }

 

komentarz 4 stycznia 2022 przez tkz Nałogowiec (42,060 p.)
Co oznacza "wszystko przestaje działać..."? Jeżeli "minDoWyplaty" jest większy, bądź równy "wartoscWyplaty" to if się wykona. Jeżeli nie, to nie. Masz problem w zrozumieniu znaków?
komentarz 4 stycznia 2022 przez Jacek Śmiel Użytkownik (510 p.)
Chodzi mi o to, że let minDoWyplaty = 17,a jeśli let wartoscWyplaty przekroczy dopiero 1.99 zaczyna poprawnie działać. To jest ta dziwna dla mnie zależność, czy może chodzić o to, że minDoWyplaty jest int'em? Może powinienem to przekonwertować to do wartości decymalnej czyli do 17.00
komentarz 4 stycznia 2022 przez Wiciorny Ekspert (281,530 p.)
ale let- nie jest intem, jest zmienną typu wartości przypisanej do niej. Więc raz jest to int, a raz jest to float.
komentarz 4 stycznia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Więc raz jest to int, a raz jest to float

W JavaScript nie ma rozróżnienia na int czy float - jest po prostu typ Number (oraz BigInt dla liczb większych niż wartość określona w stałej Number.MAX_SAFE_INTEGER).

3 odpowiedzi

0 głosów
odpowiedź 4 stycznia 2022 przez Wiciorny Ekspert (281,530 p.)
edycja 4 stycznia 2022 przez Wiciorny

Problem w tym, że jak napisałeś "zmienna" nie jest INTEM, tylko typem wartości do niej przypisanej.
Jeśli raz jest to typ int, to okej ale 1.99 jest typu float zatem to nie zadziała do końca poprawnie, bo wtedy jeśli mamy doczynienia z porównaniem  1.0 > 1  -> to jest to true jeśli wartości będą literałami 

console.log("1.0" > "1"); // "true"
console.log(1.0 > 1);     // "false"

program działa z tym, że jeśli zapiszesz 2.00 1.00 etc to w wyniku ... z racji typu ( zera zostaną odcięte )

let minDoWyplaty= 17;
let wartoscWyplaty=2.01; // jesli będzie 2.01 to wyświetli 2.01

if(minDoWyplaty >= wartoscWyplaty) {
    console.log("Zlecono wyplate o wartosci: " + wartoscWyplaty + ", minimum do wyplaty aktualnie to: " + minDoWyplaty);
}

// jeśli zapiszesz 2.00 -> wyświetli Ci 2 i tak dla kazdej wartosci

dopiero w sytuacji kiedy wartośc po kropce nie bedzie zerami (tylko 01... itd ) wyświetli ci je, dlatego że same zera zostaną pominiene i JS uzna że ma doczynienia z intem. 

komentarz 5 stycznia 2022 przez Jacek Śmiel Użytkownik (510 p.)
Czyli rozumiem, że musze w jakiś sposób powiedzieć JS'owi aby nie ucinał tych zer i porównywał na sztywno to co mu dam. Niestety nie do końca wiem jak mu to wytłumaczyć, czy mógłbym Cię poprosić o podpowiedź?
0 głosów
odpowiedź 5 stycznia 2022 przez VBService Ekspert (256,600 p.)
edycja 5 stycznia 2022 przez VBService

Spróbuj może zamienić wyrażenie w warunku "miejscami" tzn.

z

if(minDoWyplaty >= wartoscWyplaty) ...

na

if (wartoscWyplaty >= minDoWyplaty) ...

a do wypisywania liczb użyj toFixed()

let minDoWyplaty = 16.00;
let wartoscWyplaty = 2.00;
 
if (wartoscWyplaty >= minDoWyplaty)
    console.log("1. Zlecono wyplate o wartosci: " + wartoscWyplaty.toFixed(2) + ", minimum do wyplaty aktualnie to: " + minDoWyplaty.toFixed(2));
 
if (minDoWyplaty >= wartoscWyplaty)
    console.log("2. Zlecono wyplate o wartosci: " + wartoscWyplaty.toFixed(2) + ", minimum do wyplaty aktualnie to: " + minDoWyplaty.toFixed(2));

 

 

 

P.S.  wink

let a = [0.01 , 2.00 , 0.00 , 1.99 , 3.00 ];
let b = [0.00 , 16.00 , 0.01, 16.00 , 16.00 ];

console.info('');

for (let i=0; i<a.length; i++)
  if (a[i] > b[i])
    console.log('a=' + a[i] + ' jest większe od b=' + b[i]);
  else
    console.log('b=' + b[i] + ' jest większe od a=' + a[i]);

console.info('parseFloat vs. parseFloat');

for (let i=0; i<a.length; i++)
  if (parseFloat(a[i]) > parseFloat(b[i]))
    console.log('a=' + a[i] + ' jest większe od b=' + b[i]);
  else
    console.log('b=' + b[i] + ' jest większe od a=' + a[i]);

console.info('toFixed vs. parseFloat');

for (let i=0; i<a.length; i++)
  if (a[i].toFixed(2) > parseFloat(b[i]))
    console.log('a=' + a[i] + ' jest większe od b=' + b[i]);
  else
    console.log('b=' + b[i] + ' jest większe od a=' + a[i]);

console.info('parseFloat vs. toFixed');

for (let i=0; i<a.length; i++)
  if (parseFloat(a[i]) > b[i].toFixed(2))
    console.log('a=' + a[i] + ' jest większe od b=' + b[i]);
  else
    console.log('b=' + b[i] + ' jest większe od a=' + a[i]);

console.info('toFixed vs. toFixed');

for (let i=0; i<a.length; i++)
  if (a[i].toFixed(2) > b[i].toFixed(2))
    console.log('a=' + a[i] + ' jest większe od b=' + b[i]);
  else
    console.log('b=' + b[i] + ' jest większe od a=' + a[i]);

 

0 głosów
odpowiedź 5 stycznia 2022 przez Us Użytkownik (880 p.)
Trochę się głowie nad tym od parunastu minut i nadal nie widzę problemu. Wszystko działa, jak należy. Nie mam już więcej czasu na tą chwilę, ale let zarobekDoWyplaty i let minDoWyplaty, dodałem na twardo czyli np. 15 i 17, jak i z setnymi dla testu, w taki sposób to działa, więc może tam jest jakiś problem.

Podobne pytania

0 głosów
1 odpowiedź 13,531 wizyt
0 głosów
2 odpowiedzi 226 wizyt
pytanie zadane 29 lipca 2017 w HTML i CSS przez Tsevykuhi Początkujący (430 p.)
0 głosów
1 odpowiedź 185 wizyt

93,468 zapytań

142,404 odpowiedzi

322,706 komentarzy

62,849 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...