[英]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相同。
正如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();
編輯:提醒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.