sprintf () с динамической строкой

У меня есть следующий код в качестве единственного известного мне способа преобразования числа с плавающей запятой в строку с наименьшим количеством значащих цифр, необходимых для ее воспроизведения (dtoa() с режимом 4 в с).

$i = 14;
do {
$str = sprintf("%.{$i}e", $x);
$i++;
} while ($x != (float) $str);

Проверщик типов Hack сообщает об ошибке, поскольку ожидает, что первый параметр sprintf() быть литеральной строкой, чтобы можно было проверить ее по аргументам. Есть ли способ, которым я могу отключить это для этой линии?

Или есть другой способ добиться того же? Возможно с NumberFormatter учебный класс?

0

Решение

Типограф имеет различные методы подавления ошибок. Наиболее подходящим в этом случае, вероятно, HH_IGNORE_ERROR чтобы подавить эту конкретную ошибку.

Как написано, ваш код выдаст ошибку вроде Typing[4110] Invalid argument, Возьмите код ошибки, в данном случае «4110», и используйте его для добавления аннотации игнорирования:

/* HH_IGNORE_ERROR[4110] Allow dynamic sprintf() explain explain etc */
$str = sprintf("%.{$i}e", $x);

Я думаю, что ваш код ошибки, вероятно, точно 4110, но у меня нет проверки типов передо мной, чтобы удостовериться, обязательно используйте правильный код из вашего сообщения об ошибке.

Обратите внимание, что по техническим причинам синтаксический анализатор довольно привередлив HH_IGNORE_ERROR — это должен быть комментарий в стиле блока без лишних пробелов от того, что я написал выше, до финального ] в этот момент вы можете написать столько, сколько захотите, в комментариях, поясняющих.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]