打印时如何防止浮点变量显示为科学记数法

how to prevent float variables displaying as scientific notation when printing

我正在使用“(float)$val”进行一些计算,但对于一些小数值,如 -0.00000025478625 (float)-0.00000025478625 结果为 -2.5479E-70, 我需要与-0.00000025478625 相同的值,而不影响其他场景。 如何防止这种转换?

这是浮点数的科学计数法。所以,如果你想格式化那么你应该使用 number_format() 函数。 下面的示例第二个参数将告诉您需要什么精度。 因此,根据您的示例,您应该使用 14.

试试这个:

$var = number_format((float)-0.00000025478625, 14);
print($var);

我认为您误解了浮点数的表示。该值 -2.5479E-70 实际上仍然是科学表示中的浮点值。

这实际上意味着您的值非常小,因此出于可读性原因,它以这种格式表示。要阅读它,您可以将 E 替换为以下数字的 10 次方 -2.5479 * 10^(-70) 的乘积。所以这意味着你的浮点数前面有 70 个零(我不会在这里写下来)。

例如 -5.47E-4 将是 -5.47 * 10^(-4),这与 -5.47/10000 相同,结果是 -0.000547.

此外,为了打印您的值已四舍五入。在内部它仍然使用确切的值。因此,如果您在进一步评估中使用此数字,您不会失去任何准确性。

要添加到 的内容。

请注意floating point numbers in PHP have limited precision:

例如:

<?php

echo number_format((float) 0.0000000000000000000000004, 50);

甚至

<?php

printf('%f15.50', (float) 0.0000000000000000000000004);

你会得到这样的东西(取决于系统):

0.00000000000000000000000040000000000000001539794790

这不是要打印的原始浮点数。

你永远不能指望浮点数的准确性。处理它们的最佳方法是始终将它们存储为字符串,直到您需要完成一些计算。