【发布时间】:2018-02-07 09:18:18
【问题描述】:
我有这个简单的减法代码:
<?php
$n1 = 257931.076;
$n2 = 257930;
echo $n1 - $n2;
?>
为什么我得到1.0760000000009 而不是1.076
0000000009 是从哪里来的?我需要精确的结果,我不想使用round() 或number_format(),因为有时我的十进制数超过3,例如: 12345.678912,有人知道吗?
我尝试过使用round() 或number_format(),但它只用于固定小数点,而不是动态的
【问题讨论】:
-
从reading this开始如果你想知道0000000009是从哪里来的......了解浮点数学的工作原理,你就会获得智慧
-
尝试使用
number_format($variable,2,",","."); -
然后解释为什么
echo round($n1 - $n2, 10);对你想要的不够精确;只有这样(如果你绝对必须有绝对的精度,因为有人的生命依赖于它)考虑gmp的开销 -
@faid 那会很糟糕!只需像往常一样在内部进行所有计算,然后将最终结果四舍五入以输出。做任何其他事情都只是一种黑客行为。
-
如果我给你一张包含我计算
1/3的结果的纸,并要求你将它乘以 3,除非我给你一张无限长的纸,否则你永远不会得到 1。这是同样的问题,但在 base 2