带有动态字符串的sprintf()


sprintf() with dynamic string

我有以下代码,这是我所知道的将浮点转换为具有最少有效数字的字符串的唯一方法(dtoa()和C中的模式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非常挑剔——它必须是一个块样式的注释,没有我上面写的额外空格,直到最后的]之后,您可以在注释解释中随心所欲地写。