16

文字列が double かどうかを php でチェックしようとしています。

これが私のコードです:

   if(floatval($num)){
         $this->print_half_star();
    }

$num は文字列です。問題は、int がある場合でも true になることです。int ではなく float かどうかを確認する方法はありますか!?

4

8 に答える 8

25
// Try to convert the string to a float
$floatVal = floatval($num);
// If the parsing succeeded and the value is not equivalent to an int
if($floatVal && intval($floatVal) != $floatVal)
{
    // $num is a float
}
于 2012-08-07T16:02:11.303 に答える
12

これにより、文字列として表される整数値が省略されます。

if(is_numeric($num) && strpos($num, ".") !== false)
{
    $this->print_half_star();
}
于 2012-08-07T16:01:54.860 に答える
7

これを試すことができます:

function isfloat($num) {
    return is_float($num) || is_numeric($num) && ((float) $num != (int) $num);
}

var_dump(isfloat(10));     // bool(false)
var_dump(isfloat(10.5));   // bool(true)
var_dump(isfloat("10"));   // bool(false)
var_dump(isfloat("10.5")); // bool(true)
于 2012-08-07T16:02:25.320 に答える
0

正規表現の魔法を使ってみませんか

<?php
$p = '/^[0-9]*\.[0-9]+$/';
$v = '89.00';
var_dump(preg_match($p, $v));
$v = '.01';
var_dump(preg_match($p, $v));
$v = '0.01';
var_dump(preg_match($p, $v));
$v = '89';
var_dump(preg_match($p, $v));
于 2012-08-07T16:03:57.353 に答える
0

floatval()フロートのすべてのケースを取得するには、型キャストまたは型キャストによって切り取られる可能性のあるゼロを最後に追加する必要があります(float)$num

$num='17.000010';
$num_float = (float)$num; //$num_float is now 17.00001  
//add the zero's back to $num_float
while (strlen ($num) > strlen ($num_float))  $num_float = $num_float . '0';   //$spot_float in now a string again


if($num_float != $num) then $num was no double :;

noteは、ゼロを追加して文字列に変換されなかっ!==た場合に備えて使用されませんでした。$num_floatこれは、0 で終わらない値の場合に当てはまります。

于 2016-04-20T21:34:12.817 に答える
0

この「XXXXXX.XXXXXX」のような「ダブル文字列形式」の場合

チェックしてみてください

function check_double_string($str){
 $pairs = explode('.',$str);
 if ( is_array($pairs) && count($pairs)==2) {
   return ( is_numeric($pairs[0]) && is_numeric($pairs[1])? true : false; 
 }
 return false;
}
于 2012-08-07T16:05:53.680 に答える