这非常简单:
> 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 停止返回该错误。
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"由于舍入而产生的