PHP işlevi is_nan () dizeleri için bir uyarı atar [çoğaltmak]

6 Cevap php

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

Sorgu dizesi alınan bir değişken bir sayı olup olmadığını kontrol etmek için: I is_nan() fonksiyonu (değil-bir-numara yani) kullanarak oldum. Ancak, değişken bir dize olma durumunda (ki is_nan() TRUE dönmelidir durumda) fonksiyonu da aşağıdaki oldukça can sıkıcı uyarı atar:

Warning: is_nan() expects parameter 1 to be double, string given in ...(pathtopage)

is_nan() değişken not bir dizi, neden bir dize için bir hata atmak ise kontrol amaçlı olduğundan? Ben o amaca tür-dolayısıyla, sayısal olmayan parametrelerini kabul gerektiğini sanırdım ...

Böyle bir uyarı atılmış olacağını bir nedeni var mı? Ben burada göremiyorum bazı anlamı var mı?

Note: When the error is thrown, the function still behaves as expected - it returns TRUE for strings and FALSE for numbers. However, I am wondering why it would also throw a warning in the case of a string.
I have also since started using is_int() because I have found it to be better suited to my purposes, and so I am not looking for alternatives. I am just curious about this behaviour.

6 Cevap

Fonksiyonu matematiksel fonksiyonları ve işlemleri dönüş değerlerinin geçerliliğini kontrol etmek için tasarlanmıştır (NaN@wikipedia) ve parametre olarak bir şamandıra beklemektedir. Alınan örnek function's documentation,

$nan = acos(8);
var_dump($nan, is_nan($nan));

# prints:
float(NAN)
bool(true)

Ne muhtemelen istiyorum is_numeric() :

if (!is_numeric($arbitraryType)) {

From here :

nan/"not a number" is not meant to see if the data type is numeric/textual/etc..

NaN is actually a set of values which can be stored in floating-point variables, but dont actually evaluate to a proper floating point number.

The floating point system has three sections: 1 bit for the sign (+/-), an 8 bit exponent, and a 23 bit fractional part. There are rules governing which combinations of values can be placed into each section, and some values are reserved for numbers such as infinity. This leads to certain combinations being invalid, or in other words, not a number.

Bu durumda örtük dönüşümünü gerçekleştirmek için vardır çünkü. Bu sizi uyarmak gerekir. Ben örtülü atmalarını meydana nerede olduğunu bilmek istiyorum. Bu hata için çok eğilimli.

documentation bir bakış anlayışınız is_nan() yanlış olduğunu göstermektedir. Sana is_int() veya is_float() kullanmanız gerekir düşünüyorum. İsterseniz değişkeni dönüştürmek için bir explict döküm kullanabilirsiniz.

is_int(), değişken taşıma fonksiyonu ise is_nan(), bir matematik fonksiyonudur.

Check: http://se2.php.net/manual/en/function.is-nan.php

"Bool is_nan (float $ val)" <- Bu yüzden.

Bir koşullu, benzeri is_nan () işlevi sarın eğer hata alıyorum:

if(is_nan('xxx')) {
echo   "Hey, that's no number!";
}
else {
...............
 }