PHP Printf As Float Precision

时间:2015-01-11 05:18:55

标签: php floating-point printf floating-accuracy

我正在尝试使用PHP的printf功能打印出用户的存储容量。完整的公式看起来像这样:

echo printf("%.02f", ($size/(1024*1024))) . " GB";

鉴于$size == (10 * 1024 * 1024),这应该打印出来

  

10.00 GB

但它没有。它打印10.04 GB。此外,

echo printf("%.02f", 10)

结果

  

10.04


什么?在给它一个转换为float的整数时,它将10转换为10.00000009。

如何解决这个问题?显然,一种解决方案是将其作为整数打印出来,但该值并不总是整数;它可能是5.57 GB,在这种情况下,此脚本的准确性非常重要。


嗯......

echo printf("%d", 10)

结果

  

102

这里出了点问题。

2 个答案:

答案 0 :(得分:0)

显然printf并不意味着回应。完全没有。

只需将printf的实例更改为sprintf即可修复该问题。


此外,删除回显,只是以printf("%.02f", 10)运行命令,实际上是打印10.00,但是,应该注意的是,您不能像回显一样将字符串附加到printf


如果你问我,PHP应该抛出一个语法错误,意外的T_FUNCTION或其他什么,但我离题了。

答案 1 :(得分:0)

这是深入的,但我会尝试解释:

echo printf("%d", 10)

当使用表达式调用echo时,它首先评估所有参数,然后在屏幕上显示它们。

调用echo printf()函数时...执行它,以获取其值。 因此,这会导致IMIDIATLY打印“10”,并将函数的结果值串起来echo - 编辑。

返回printf(“%d”,10)实际为2,如果您检查docs它会返回结果字符串的长度

所以在屏幕上你会看到“10”,“2”

你真的不应该将 Print()和类似功能与 Echo 一起使用。

P.S 这是另一个宝石:
echo 1. print(2) + 3; //结果:214