带有动态字符串的 sprintf()

sprintf() with dynamic string

我有以下代码,这是我所知道的将浮点数转换为字符串的唯一方法,它具有重现它所需的尽可能少的有效数字(dtoa(),模式为 4,在 C 中)。

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

Hack 类型检查器报告错误,因为它希望 sprintf() 的第一个参数是文字字符串,因此它可以根据参数检查它。有什么办法可以关闭这条线路吗?

或者有其他方法可以达到同样的效果吗?也许与 NumberFormatter class?

类型检查器有 various methods of suppressing errors。在这种情况下最合适的可能是 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 非常挑剔——它必须是块式注释,没有我上面写的额外空格,直到最后的 [=14] =] 到那时你可以在评论中尽可能多地写解释。