sprintf 失败,数字长度超过 9 位
sprintf failing with numeric over 9 digits in length
这很简单:
> 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
最终我需要在 12 位数字上使用它,但我只是删除了数字直到 sprintf 停止返回该错误。
8150025901
对于整数来说太大了,最大值为 2147483647
您可以将 sprintf 与 double 而不是 int 一起使用并获得所需的结果。确切的代码是:
sprintf("%013.000f",8150025901)
但是,重要的是要注意——虽然 R 不会给你一个明确的错误或警告——如果你试图用超过 ~15 的数字来做到这一点数字,你会得到不可预测的结果。
这是因为 R 中的双精度数具有 53 位精度,并且 10^15 < 2^53 < 10^16。这意味着您要转换的数字的舍入误差大于 1 的 16 位数字,因此(例如)sprintf("%013.000f",10^16)
和 sprintf("%013.000f",10^16+1)
由于舍入
都产生 "10000000000000000"
]
这很简单:
> 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
最终我需要在 12 位数字上使用它,但我只是删除了数字直到 sprintf 停止返回该错误。
8150025901
对于整数来说太大了,最大值为 2147483647
您可以将 sprintf 与 double 而不是 int 一起使用并获得所需的结果。确切的代码是:
sprintf("%013.000f",8150025901)
但是,重要的是要注意——虽然 R 不会给你一个明确的错误或警告——如果你试图用超过 ~15 的数字来做到这一点数字,你会得到不可预测的结果。
这是因为 R 中的双精度数具有 53 位精度,并且 10^15 < 2^53 < 10^16。这意味着您要转换的数字的舍入误差大于 1 的 16 位数字,因此(例如)sprintf("%013.000f",10^16)
和 sprintf("%013.000f",10^16+1)
由于舍入
"10000000000000000"
]