为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕田峪7331174 2024-01-19 10:09:10
我使用“(float)$val”进行一些计算,但是对于像-0.00000025478625 (float)-0.00000025478625这样的小数值,结果是-2.5479E-70,我需要与-0.00000025478625相同的值,而不影响其他值场景。如何防止这种转换?
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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

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

例如-5.47E-4, which 与的结果-5.47 * 10^(-4)相同。-5.47/10000-0.000547

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


查看完整回答
反对 回复 2024-01-19
?
慕仙森

TA贡献1827条经验 获得超7个赞

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

尝试这个:

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


查看完整回答
反对 回复 2024-01-19
?
慕森王

TA贡献1777条经验 获得超3个赞

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

https://img1.sycdn.imooc.com/65a9d9f40001d25909140398.jpg

例如:

<?php
echo number_format((float) 0.0000000000000000000000004, 50);

甚至

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

你会得到这样的结果(取决于系统):

0.00000000000000000000000040000000000000001539794790

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

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


查看完整回答
反对 回复 2024-01-19
  • 3 回答
  • 0 关注
  • 42 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信