如何防止浮点变量在打印时显示为科学记数法 [重复]

how to prevent float variables displaying as scientific notation when printing [duplicate]

提问人:Maria Sahithya 提问时间:9/11/2020 最后编辑:Koala YeungMaria Sahithya 更新时间:4/19/2022 访问量:1120

问:

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

PHP 浮点 类型转换 精度

评论

2赞 YvesLeBorg 9/11/2020
那不是,那是浮点数的科学记数法。float 就是 float。hex value
0赞 Koala Yeung 9/11/2020
只有当您知道小数位的固定限制时,您才能这样做。否则,它的准确性是永远不能指望的。
0赞 Manish Kumar 9/11/2020
Float 不是函数:)。它应该是 (float)-0.00000025478625

答:

0赞 Manish Kumar 9/11/2020 #1

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

试试这个:

$var = number_format((float)-0.00000025478625, 14);
print($var);
1赞 Handfeger 9/11/2020 #2

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

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

例如,这与导致 .-5.47E-4-5.47 * 10^(-4)-5.47/10000-0.000547

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

0赞 Koala Yeung 9/11/2020 #3

马尼什的回答需要补充一些东西。

请注意,PHP 中的浮点数精度有限

enter image description here

例如:

<?php

echo number_format((float) 0.0000000000000000000000004, 50);

甚至

<?php

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

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

0.00000000000000000000000040000000000000001539794790

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

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