PHP Printf As Float 精度

PHP Printf As Float Precision

我正在尝试使用 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


什么?!在给它一个整数以转换为浮点数时,它将 10 转换为 10.00000009.

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


嗯……

echo printf("%d", 10)

结果

102

这里出了点问题。

所以显然 printf 不应该被回应。完全没有。

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


此外,去掉回显,只运行命令printf("%.02f", 10),实际上打印10.00,但是需要注意的是,不能追加字符串到printf 就像你可以回显一样。


如果你问我,PHP 应该会抛出一个语法错误,意想不到的 T_FUNCTION 之类的,但我离题了。

这太深了,但我会尽力解释:

echo printf("%d", 10)

TL>TR:当用表达式调用echo时,它首先计算所有参数,然后在屏幕上显示结果。 如果某些表达式在求值时在屏幕上打印出一些东西,你就会变得一团糟。

首先发生的事情是 printf() 它被执行,以获取它的值。 这导致立即在 screen/output.

上打印“10”

然后,回显 printf()return 结果,在本例中为“2”。 如果检查结果字符串的 docs printf returns length

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

您真的不应该将 Print() 和类似函数与 Echo.

一起使用

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