sprintf 因数字长度超过 9 位而失败

sk0*_*099 2 printf r

这非常简单:

> sprintf("%013d",150025901)
[1] "0000150025901"
> sprintf("%013d",8150025901)
Error in sprintf("%013d", 8150025901) : 
  invalid format '%013d'; use format %f, %e, %g or %a for numeric objects
Run Code Online (Sandbox Code Playgroud)

最终我需要在 12 位数字上使用它,但我只是删除了数字,直到 sprintf 停止返回该错误。

Fra*_*ank 5

8150025901对于整数来说太大,最大值为2147483647

您可以使用带有 double 而不是 int 的 sprintf 并获得所需的结果。确切的代码是:

sprintf("%013.000f",8150025901)
Run Code Online (Sandbox Code Playgroud)

然而,值得注意的是,虽然 R 不会给您明确的错误或警告,但如果您尝试对超过 15 位数字执行此操作,您可能会得到不可预测的结果。

这是因为 R 中的双精度数具有 53 位精度,并且 10^15 < 2^53 < 10^16。这意味着您要转换的数字的舍入误差对于 16 位数字而言大于 1,因此(例如)sprintf("%013.000f",10^16)sprintf("%013.000f",10^16+1)两者都是"10000000000000000"由于舍入而产生的