is_int()は数値型文字列をfalseで返す。
is_numeric()は数値型文字列もtrueで返す。
てことで、こんなふうに書いてみた。
static function is_error_int($value){
//データが存在するとき、数値(数値型文字列含む)、int変換した時と同じ(端数がない)
return isset($value) && ( ! is_numeric($value) || $value - intval($value) > 0 );
}
追記:
filter_var による方法を教えて頂きました。
これは便利ですね。
echo is_decimal(10); //true
echo is_decimal(10.01); //false
echo is_decimal("10"); //true
echo is_decimal("10.01"); //false
echo is_decimal("ABC"); //false
echo is_decimal(0x10); //true
echo is_decimal("0x10"); //false
function is_decimal($value) {
return filter_var($value, FILTER_VALIDATE_INT) !== false;
}
その他にもたくさんのフィルターがあります。
http://php.net/manual/ja/filter.filters.validate.php