Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: JavaScript: JS: Mikä on modulo?

Sivun loppuun

SxP_Code [14.11.2013 19:29:19]

#

Olen aloittanut opiskelemaan javascriptiä Codecademyssä
Olen jumissa, koska en ymmärrä modulosta yhtään mitään. Voisitteko auttaa? Olisin kiitollinen!

Grez [14.11.2013 19:48:59]

#

http://fi.wikipedia.org/wiki/Jakojäännös

Yucca [14.11.2013 20:31:38]

#

”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.

Metabolix [14.11.2013 21:25:48]

#

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");

groovyb [14.11.2013 22:01:15]

#

tai jos haluat tehdä asian x vaikka joka toinen kerta.

if(i % 2  == 0) {
   $("#Prefix_" + rivit[i].indexNumber).css({"backgroundColor": "Yellow"});
}

Grez [15.11.2013 01:53:25]

#

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.

Oskuz [15.11.2013 05:42:32]

#

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.

Grez [15.11.2013 06:05:51]

#

Oskuz kirjoitti:

Voit yhtähyvin laskea 1%0.02=0.

Tosin javascriptissä tulos on 0.01999999999999998, jonka vuoksi laitoinkin "toimii" lainausmerkkeihin

SxP_Code [15.11.2013 15:34:32]

#

Kiitos avusta! Auttoivat nämä auttoivat todella paljon!

Yucca [15.11.2013 17:07:35]

#

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.)

Metabolix [15.11.2013 23:43:14]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta