Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP sqrt()

Macro [18.05.2010 16:28:38]

#

Funktio sqrt() palauttaa luvun neliöjuuren. Funktio strpos() tarkistaa, onko merkkijonossa haluttua merkkiä. strpos() -funktion vertailu IF-lauseessa operaattorilla === false, ensimmäisessä IF-lauseen lohkossa on epätosiarvo, eli merkkijonosta ei löytynyt haettua merkkijonoa.

<?php
echo (strpos(".", sqrt($_REQUEST["luku"])) === false) ? 0 : 1;

Koodin pitäisi tarkistaa $_REQUEST["luku"] -muuttujasta, onko siinä pistettä. Jos on, palautetaan 0 ja muutoin 1. Tämä siis liittyy PHP-haasteen tehtävään 19. Miksi neljännessä testissä ohjelmani palauttaa 0, vaikka tulos on 1? Ohjelma toimii edellisissä testeissä, mutta ei tässä.

Metabolix [18.05.2010 16:34:46]

#

En nyt muista noita testejä ulkoa (enkä yritäkään), mutta yksi syy voi olla liukulukujen epätarkkuus. Joka tapaukessa suosittelen jotain toista ratkaisutapaa.

Macro [18.05.2010 16:39:05]

#

Onnistuin tehtävässä, kun vertasin neliöjuurta joka on kokonaisluku float-arvoiseen neliöjuureen.

progo [18.05.2010 17:06:58]

#

Juuri niin on parempi:

if ( floor(sqrt($luku)) == sqrt($luku) ) {
  // $luku on neliö
}

punppis [19.05.2010 23:15:15]

#

Häh? Mitä eroa on if(a == b) ja if(a === b) ?

Metabolix [19.05.2010 23:20:28]

#

Kolmen =-merkin operaattori === tarkistaa myös arvon tyypin.

0 == false   # tosi
0 === false  # epätosi

trilog [19.05.2010 23:20:40]

#

punppis kirjoitti:

Häh? Mitä eroa on if(a == b) ja if(a === b) ?

<?php
"2" == 2; // true
"2" === 2; // false

Vastaus

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

Tietoa sivustosta