Int
Целые числа не имеют десятичных цифр, поэтому ответ всегда равен нулю.
Double / Float
Двойные числа или числа с плавающей запятой являются приблизительными. Таким образом, они не имеют определенного количества десятичных цифр.
Небольшой пример:
$number = 12.00000000012;
$frac = $number - (int)$number;
var_dump($number);
var_dump($frac);
Выход:
float(12.00000000012)
float(1.2000000992884E-10)
Вы можете увидеть две проблемы здесь, второе число использует научное представление, и оно не совсем 1.2E-10.
Строка
Для строки, содержащей целое число / число с плавающей запятой, вы можете искать десятичную точку:
$string = '12.00000000012';
$delimiterPosition = strrpos($string, '.');
var_dump(
$delimiterPosition === FALSE ? 0 : strlen($string) - 1 - $delimiterPosition
);
Выход:
int(11)