在PHP中将浮点数转换为字符串?

29

喜欢:

float(1.2345678901235E+19) => string(20) "12345678901234567890"

能做到吗?

(这是针对json_decode的...)

6个回答

55
echo number_format($float,0,'.','');

注意:此操作仅适用于整数,将0增加以获得额外的小数位数


2
如果你想要最大位数的小数点,这是一个不错的解决方案。根据问题,我会将上面的代码更改为 echo number_format($float,10,'.','');,这样它就有了最多10位小数(这个数字是任意的,但我相信它应该大于0)。 - Anthony
浮点数具有有限的精度,一旦您的整数足够大,它就无法工作。应该适用于约14位数字。超过这个范围可能会工作,但可能只是纯属运气。 - Karoly Horvath
这个值现在有17个数字。你知道什么时候它会停止精确地转换浮点数吗? - tweety
你可以在函数调用中更改设置,参见我的答案。 - Anthony
这些最初是浮点数吗?因为那样它们已经失去了精度。如果它们是整数,请尝试将它们作为字符串发送。 - Karoly Horvath
显示剩余2条评论

19
$float = 0.123;
$string = sprintf("%.3f", $float); // $string = "0.123";

2

原来,json_decode默认将大整数转换为浮点数。但可以在函数调用中覆盖此选项:

$json_array = json_decode($json_string, , , 1);

我只是根据主要文档进行翻译,所以请测试并让我知道它是否有效。


这是我尝试的第一件事 - JSON_BIGINT_AS_STRING,然后我得到了:json_decode最多只能接受3个参数bla bla...和未定义的常量消息。 - tweety
1
哈!我刚刚测试了一下,结果出现了同样的错误,但是提示是“最多只能有2个参数”。看起来第三个参数是在5.3版本中添加的,第四个参数是在5.4版本中添加的。所以如果我们升级我们的php版本,应该就可以解决这个问题了。 - Anthony
无论如何,这甚至不是有效的代码,你不能省略参数。 - netcoder
你不能吗?它说我传入了4个参数...让我进行测试。 - Anthony

0

我通过在options参数中传递JSON_BIGINT_AS_STRING参数来解决了这个问题。

json_decode($json, false, 512, JSON_BIGINT_AS_STRING)

请参见json_decode文档中的示例#5。


0

0

双精度浮点数只能容纳大约15个有效数字。最好的方法是使用零填充额外的数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接