sprintf失败,数字长度超过9位

时间:2015-09-16 15:36:54

标签: r printf

这很简单:

> 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停止返回该错误。

1 个答案:

答案 0 :(得分:2)

whereHas对于整数而言太大,最大值为App\User::whereHas(...

您可以将sprintf与double而不是int一起使用,并获得所需的结果。确切的代码是:

8150025901

然而,重要的是要注意 - 虽然R不会给你一个明确的错误或警告 - 如果你尝试使用超过15位数的数字,你可以得到不可预知的结果。

这是因为R中的双精度具有53位精度,并且10 ^ 15 <1。 2 ^ 53&lt; 10 ^ 16。这意味着您要转换的数字的舍入误差大于16位数的一个,因此(例如)2147483647sprintf("%013.000f",8150025901) 由于舍入而产生sprintf("%013.000f",10^16)