У меня есть следующий код в качестве единственного известного мне способа преобразования числа с плавающей запятой в строку с наименьшим количеством значащих цифр, необходимых для ее воспроизведения (dtoa()
с режимом 4
в с).
$i = 14;
do {
$str = sprintf("%.{$i}e", $x);
$i++;
} while ($x != (float) $str);
Проверщик типов Hack сообщает об ошибке, поскольку ожидает, что первый параметр sprintf()
быть литеральной строкой, чтобы можно было проверить ее по аргументам. Есть ли способ, которым я могу отключить это для этой линии?
Или есть другой способ добиться того же? Возможно с NumberFormatter
учебный класс?
Типограф имеет различные методы подавления ошибок. Наиболее подходящим в этом случае, вероятно, 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
— это должен быть комментарий в стиле блока без лишних пробелов от того, что я написал выше, до финального ]
в этот момент вы можете написать столько, сколько захотите, в комментариях, поясняющих.
Других решений пока нет …