Bu PHP kodu vardır:
$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;
Ne ben bilmek istiyorum $entityElementCount bir tam sayı (2, 6, ...) veya kısmi (2.33, 6.2, ...) olup olmadığını kontrol etmek, nasıl olduğunu.
Teşekkür ederiz!
Temel yolu, Chacha dedi gibi
if (floor($number) == $number)
Ancak, kayan nokta türleri doğru 1 0,999999997 olarak depolanıyor olabilir anlamına gelir numaralarını saklayamazsınız. Bu olacak tabii ki 0'a aşağı yuvarlanır olacak çünkü yukarıdaki çek bir tam sayı olarak kabul edilecek close enough 1 bile sizin amaçlı olsa da, başarısız olur yani. Dolayısıyla böyle bir şey deneyin:
if (abs($number - round($number)) < 0.0001)
Eğer şimdiye kadar "ten"
veya "100"
, sadece {kullanabileceğiniz gibi, bir dize olarak döküm bir tamsayı olmayacaktır anlamı (sayısal olacağını biliyorsanız [(2) }]:
$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;
$entityWholeNumber = is_int($entityElementCount);
echo ($entityWholeNumber) ? "Whole Number!" : "Not a whole number!";
Ben bu eski olduğunu biliyorum, ama ben sadece bir şey buldu, paylaşmak istedim:
fmod kullanın ve 0 kontrol
$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;
if (fmod($entityElementCount,1) != 0) {
echo 'Not a whole number!';
} else {
echo 'A whole number!';
}
Eğer bir fraksiyon varsa,% benim için çalışmak gibi görünüyor (0 döndürür ... Örneğin, echo 9.4 % 1;
çıktısı 0
). değil çünkü fmod% farklıdır Fmod ile, kesir kısmını alırsınız. Örneğin:
echo fmod(9.4, 1);
Will çıkış 0.4
if(floor($number) == $number)
Istikrarlı bir algoritma değildir. Bir değer Matematiksel ifadeyle 1.0 olduğunda sayısal değeri 0,9999999 olabilir. Bunu kat () uygularsanız 0,9999999 eşittir olmadığı 0 olacaktır.
Örneğin 3 basamaklı bir hassas yarıçapı tahmin var
if(round($number,3) == round($number))
Bu gibi intval işlevini kullanın:
if($number === intval($number)) {
}
Testler:
var_dump(10 === intval(10)); // prints "bool(true)"
var_dump("10" === intval("10")); // prints "bool(false)"
var_dump(10.5 === intval(10.5)); // prints "bool(false)"
var_dump("0x539" === intval("0x539")); // prints "bool(false)"
1)
if(floor($number) == $number) { // Currently most upvoted solution:
Testler:
$number = true;
var_dump(floor($number) == $number); // prints "bool(true)" which is incorrect.
2)
if (is_numeric($number) && floor($number) == $number) {
Köşe durum:
$number = "0x539";
var_dump(is_numeric($number) && floor($number) == $number); // prints "bool(true)" which depend on context may or may not be what you want
3)
if (ctype_digit($number)) {
Testler:
var_dump(ctype_digit("0x539")); // prints "bool(false)"
var_dump(ctype_digit(10)); // prints "bool(false)"
var_dump(ctype_digit(0x53)); // prints "bool(false)"
Ne basit bir yaklaşım bir değer bütün olup olmadığını belirlemek için modül (%) kullanmak olacaktır gibi görünüyor.
x = y % 1
Y bir tam sayı başka bir şey ise, sonuç sıfır değildir (0). Bir test sonra olacaktır:
if (y % 1 == 0) {
// this is a whole number
} else {
// this is not a whole number
}
var isWhole = (y % 1 == 0? true: false); // to get a boolean return.
Bu daha sonra sadece) etrafında y
her zaman pozitif test etmek için (ABS sarın, bir tam sayı olarak negatif bir sayı görüntüler verildi.