簡體   English   中英

PHP檢查是否為整數

[英]PHP check if is integer

我有以下計算:

$this->count = float(44.28)
$multiple = float(0.36)
$calc = $this->count / $multiple;
$calc = 44.28 / 0.36 = 123

現在我想檢查我的變量$calc是否為整數(有小數)。

我嘗試了if(is_int()) {}但是這不起作用,因為$calc = (float)123

也試過這個 -

if($calc == round($calc)) 
{ 
   die('is integer');
} 
else 
{
   die('is float);
}

但這也行不通,因為它在每種情況下都返回'is float' 在上面的情況下,這應該是真的,因為在舍入后123與123相同。

嘗試-

if ((string)(int) $calc === (string)$calc) {
  //it is an integer
}else{
  //it is a float
}

演示

正如CodeBird在對該問題的評論中指出的那樣,由於精度“錯誤”,浮點可能會出現意外行為。

例如

<?php
$x = 1.4-0.5;
$z = 0.9;

echo $x, ' ', $z, ' ', $x==$z ? 'yes':'no';

在我的機器上打印(win8,x64但是32位構建的php)

0.9 0.9 no

花了一段時間才找到一個(希望是正確的)例子,這個例子是a)與這個問題相關,b)顯而易見(我認為x / y * y很明顯)。

再次,這是在64位Windows 8上的32位構建上測試的

<?php
$y = 0.01; // some mambojambo here... 
for($i=1; $i<31; $i++) { // ... because ...
    $y += 0.01; // ... just writing ...
} // ... $y = 0.31000 didn't work

$x = 5.0 / $y;
$x *= $y;

echo 'x=', $x, "\r\n";
var_dump((int)$x==$x);

而輸出是

x=5
bool(false)

根據您要實現的目標,可能需要檢查該值是否在整數的某個范圍內(或者它可能只是頻譜另一側的邊際;-)),例如

function is_intval($x, $epsilon = 0.00001) {
    $x = abs($x - round($x));
    return $x < $epsilon;
};

您還可以查看一些任意精度庫,例如bcmath擴展 ,您可以在其中設置“精度等級”。

round()將返回一個浮點數。 這是因為您可以設置小數位數。

你可以使用正則表達式:

if(preg_match('~^[0-9]+$~', $calc))

當將$calc傳遞給preg_match()時,PHP會自動將$calc轉換為字符串。

你可以用((int) $var == $var)來做

$var = 9;
echo ((int) $var == $var) ? 'true' : 'false';
//Will print true;
$var = 9.6;
echo ((int) $var == $var) ? 'true' : 'false';
//Will print false;

基本上你檢查$var的int值是否等於$var

您可以使用number_format()將數字轉換為正確的格式,然后像這樣工作

$count = (float)(44.28);

$multiple = (float)(0.36);

$calc = $count / $multiple;
//$calc = 44.28 / 0.36 = 123

$calc = number_format($calc, 2, '.', '');

if(($calc) == round($calc))
die("is integer");
else
die("is not integer");

演示

好吧,我想我已經很晚了,但這是一個使用fmod()的替代方案,這是一個模運算。 我只是在計算2個變量后存儲該分數,並檢查它們是否> 0,這意味着它是一個浮點數。

<?php

  class booHoo{
     public function __construct($numberUno, $numberDos) {
        $this->numberUno= $numberUno;
        $this->numberDos= $numberDos;
     }

     public function compare() {
       $fraction = fmod($this->numberUno, $this->numberDos);
       if($fraction > 0) {
         echo 'is floating point';
       } else {
         echo 'is Integer';
       }
     }
   }

$check= new booHoo(5, 0.26);
$check->compare();

Eval在這里

編輯:提醒Fmod將使用一個部門來比較數字, 這里可以找到整個文檔

if (empty($calc - (int)$calc))
{
    return true; // is int
}else{
    return false; // is no int
}

試試這個:

//$calc = 123;
$calc = 123.110;
if(ceil($calc) == $calc)
{
    die("is integer");
}
else
{
    die("is float");
}

你可以在is_int()函數的地方使用is_int() round()函數。

if(is_int($calc)) { 
die('is integer');
} else {
die('is float);
}

我認為這會對你有所幫助

檢查浮點數是否也是整數的更為非正統的方法:

// ctype returns bool from a string and that is why use strval
$result = ctype_digit(strval($float));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM