PHP Karekök

6 Cevap php

Neden PHP "16" için sqrt olmayan bir tamsayı çıktı?

Örnek

php > $fig = 16;
php > $sq = sqrt($fig); //should be 4
php > echo $sq;
4
php > echo is_int($sq);            // should give 1, but gives false
php >

I feel that the problem is in the internal presentation which PHP hides similarly as Python. How can you then know when the given figure is integer after taking a square root?

Peki nasıl bir regex kullanmadan 4 ve 4.12323 PHP ayırt edebilir?

6 Cevap

PHP kılavuzuna göre, float sqrt ( float $arg ), sqrt () her zaman bir şamandıra döndürür. Bu veri türünü kontrol eder ve bir hata verir çünkü is_int () fonksiyonunu kullanarak sorunu çözmez.

Bu etrafında almak için, bunun yerine modül kullanarak test edebilirsiniz: ((fmod olmalı) kayan nokta modülü değil tamsayı modülü için% operatör için)

if (fmod(sqrt(16), 1) == 0) {
   // is an integer
}

Eğer 5.2.0 veya sonraki PHP kullanıyorsanız, bu da çalışma olduğuna inanıyorum, ama emin olmak için durum bu tip kullanmış değil:

$result = sqrt(16);
if (filter_var($result, FILTER_VALIDATE_INT)) {
    // is an integer
}

Hayır, bu bir sayı değildir. It's a float.

Bu dönüş türü float, sağ API diyor.

http://us2.php.net/sqrt

 float sqrt  ( float $arg  )

Arg karekökünü döndürür.

Sen değerin tamsayı kısmını almak ve özgün değerini çıkarmak için zemin işlevini kullanabilirsiniz. Fark! = 0 sonra onun değil bir tamsayı ise. örneğin

if (($sq - floor($sq)) == 0){
   YES
}else{
 NO
}

Her zaman bir float döndürür, çünkü:

float sqrt(float $arg)

İsterseniz bir tamsayı haline çevirebilirsiniz:

intval(sqrt(16));

EDIT, Ok then:

$sqrt = sqrt(16);

if (strpos($sqrt, '.') !== false)
{
    $sqrt = intval($sqrt);
}

else
{
    $sqrt = floatval($sqrt);
}

var_dump($sqrt);