質問

なぜそのような出力 sqrt ない整数には"16"PHP?

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 > 

なっているように感じている問題の内部表示するPHPを隠同様にしています。どのようにすることができますその際にお知ら指定された図は整数を受けた後、平方根?

でどのようにすることができますの差別化 44.12323 PHPを使用せずにregex?

役に立ちましたか?

解決

PHPマニュアル、float sqrt ( float $arg )、SQRT()によれば、常にフロートを返します。それはデータ型をチェックし、失敗を返すためis_int()関数を使用して問題を解決しないであろう。

これを回避するには、代わりに係数を使用して、それをテストすることができます:

(ポイント弾性率ではなく、整数係数のために%演算子をフローティング()FMODでなければなりません)
if (fmod(sqrt(16), 1) == 0) {
   // is an integer
}
あなたはPHP 5.2.0以降を使用している場合は、

、私はこれも動作しますが、私は特定する状況のこのタイプでそれを使用していないと信じています:

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

他のヒント

いいえ、それは整数ではありません。 それはフロートのです。

これは、戻り値の型がfloatで、右のAPIに述べています。

http://us2.php.net/sqrtする

 float sqrt  ( float $arg  )

引数の平方根を返します。

あなたは値の整数部分を取得し、元の値を減算するために床関数を使用することができます。違いが!= 0その整数でない場合には。例えばます。

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

で返しますfloat:

float sqrt(float $arg)

できるキャストで整したい場合は:

intval(sqrt(16));

編集なので、その後:

$sqrt = sqrt(16);

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

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

var_dump($sqrt);

別の言い方をチェックのための整数のうキャスト文字列をチェックすること ctype_digit()

$result = sqrt(16);
if (ctype_digit((string)$result)) {
   // is an integer
}

もちろんこれは少し変な方法に比べ使用moduloき計算。その際知っておくと便利な検査値を表示しない"の設定を解除し、形にしています文字列。 る点に注意することにfalseを返すための整数でなければなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top