Olen aloittanut opiskelemaan javascriptiä Codecademyssä
Olen jumissa, koska en ymmärrä modulosta yhtään mitään. Voisitteko auttaa? Olisin kiitollinen!
”JavaScript – the Definitive Guide” selittää näin:
”The % operator computes the first operand modulo the second operand. In other words, it returns the remainder after whole-number division of the first operand by the second operand. The sign of the result is the same as the sign of the first operand. For example, 5 % 2 evaluates to 1 and -5 % 2 evaluates to -1.”
Tuo ei ole ihan eksaktisti sanottu, mutta selvästi, ja riittää useimpiin tarpeisiin. Käytännössä %-operaattoria käytetään yleensä vain jaollisuuden testaamiseen. Esimerkiksi if(n % 2 === 0) testaa, onko n parillinen.
Yucca kirjoitti:
Käytännössä %-operaattoria käytetään yleensä vain jaollisuuden testaamiseen.
Mihin tämä tieto perustuu? Itse olen käyttänyt %-operaattoria moneen muuhunkin asiaan. Jaollisuuden testaaminen on enimmäkseen liittynyt algoritmiohjelmointiin, kun taas käytännön asioissa käyttötarkoitus on ollut yleensä toinen.
Jakojäännös on tarpeen esimerkiksi silloin, kun muutetaan sekunteina annettua aikamäärää tunneiksi, minuuteiksi ja sekunneiksi:
var sekunnit = 34567; var h = Math.floor(sekunnit / 60 / 60); var m = Math.floor(sekunnit / 60) % 60; var s = sekunnit % 60; alert((h ? h + " h " : "") + (m ? m + " min " : "") + (s ? s + " s" : "") || "0 s");
tai jos haluat tehdä asian x vaikka joka toinen kerta.
if(i % 2 == 0) { $("#Prefix_" + rivit[i].indexNumber).css({"backgroundColor": "Yellow"}); }
Yucca kirjoitti:
”JavaScript – the Definitive Guide” selittää näin:
...it returns the remainder after whole-number division of the first operand by the second operand.
Tää teksti ihan inasen hämää mua. Kyllähän jakojäännös javascriptissä "toimii" myös liukuluvuille.
Tietenkin toimii, laskun: 3.5%2 jakojäänös on 1.5.
Eikä jakojäänökselle ole mitään väliä, mitä numero tyyppiä lasketaan.
Voit yhtähyvin laskea 1%0.02=0.
Oskuz kirjoitti:
Voit yhtähyvin laskea 1%0.02=0.
Tosin javascriptissä tulos on 0.01999999999999998, jonka vuoksi laitoinkin "toimii" lainausmerkkeihin
Kiitos avusta! Auttoivat nämä auttoivat todella paljon!
Grez kirjoitti:
Yucca kirjoitti:
”JavaScript – the Definitive Guide” selittää näin:
...it returns the remainder after whole-number division of the first operand by the second operand.Tää teksti ihan inasen hämää mua. Kyllähän jakojäännös javascriptissä "toimii" myös liukuluvuille.
Kuten kirjoitin: ”Tuo ei ole ihan eksaktisti sanottu, mutta selvästi”. Tämä on niitä asioita, joissa pitää lukea vähintään kaksi selostusta, jos haluaa täsmällisen ja ymmärrettävän selostuksen.
Liukulukujen %-operaattorille voi ehkä joku keksiä oikean käytönkin, ja silloin hän varmaankin haluaa tarkistaa ECMAScript-standardista sen täsmällisen merkityksen. Mutta ”whole-number division” on itse asiassa ihan kuvaava. Se kuvaa, mistä tässä oikein on kyse (ECMAScript 5.1, kohta 11.5.3): ”the floating-point remainder r from a dividend n and a divisor d is defined by the mathematical relation r = n − (d × q) where q is an integer that is negative only if n/d is negative and positive only if n/d is positive, and whose magnitude is as large as possible without exceeding the magnitude of the true mathematical quotient of n and d. r is computed and rounded to the nearest representable value using IEEE 754 round-to-nearest mode.” (Pointti siis siinä, että tuo q on kokolaisluku, ja operandeja n ja d siis käsitellään niin, että katsotaan, montako kokonaista kertaa d menee n:ään, ja sitten se mitä jää jäännökseksi on %-operaattorin tulos.)
Yucca kirjoitti:
Liukulukujen %-operaattorille voi ehkä joku keksiä oikean käytönkin, ja silloin hän varmaankin haluaa tarkistaa ECMAScript-standardista sen täsmällisen merkityksen.
Sinuna lopettaisin jo nuo kurjat pätemisyritykset. Moni tietää oikeita käyttötilainteita liukulukujen %-operaattorille, ja sitä varten ei missään nimessä ole tarpeen lukea ECMAScript-standardia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.