这很简单:
> 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停止返回该错误。
答案 0 :(得分:2)
whereHas
对于整数而言太大,最大值为App\User::whereHas(...
您可以将sprintf与double而不是int一起使用,并获得所需的结果。确切的代码是:
8150025901
然而,重要的是要注意 - 虽然R不会给你一个明确的错误或警告 - 如果你尝试使用超过15位数的数字,你可以得到不可预知的结果。
这是因为R中的双精度具有53位精度,并且10 ^ 15 <1。 2 ^ 53&lt; 10 ^ 16。这意味着您要转换的数字的舍入误差大于16位数的一个,因此(例如)2147483647
和sprintf("%013.000f",8150025901)
由于舍入而产生sprintf("%013.000f",10^16)