【发布时间】:2013-05-03 13:16:49
【问题描述】:
数字是13911392101301011,无论使用sprintf 还是number_format,我都会得到同样奇怪的结果。
sprintf('%017.0f', "13911392101301011"); // Result is 13911392101301012
number_format(13911392101301011, 0, '', ''); // Result is 13911392101301012
sprintf('%017.0f', "13911392101301013"); // Result is 13911392101301012
number_format(13911392101301013, 0, '', ''); // Result is 13911392101301012
【问题讨论】:
-
随机想法:该数字是否被解释为
float或double并四舍五入到此类数据类型的最接近的有效值?注意到它太大而无法容纳 32 位整数,但它可以容纳 64 位整数,但不确定是否是。 -
我知道这太大了,但我发现使用
sprintf或number_format应该可以解决问题。不幸的是,在这种情况下不起作用 -
有趣的是
13911392101301014打印正确而13911392101301011打印不正确,所以这不是范围问题 -
@ØHankyPankyØ 是的,这对我来说也是最奇怪的事情。当您尝试回显
13911392101301015时,问题再次存在,结果为13911392101301016
标签: php printf number-formatting