PHP字符串浮动奇怪

PHP字符串浮动奇怪,php,string,Php,String,我不明白结果是什么?!29.85-3.5527136788005E-15 PHP错误?与floatval或cast的结果相同 你能帮助我吗?下面是简单的示例代码: <?php $new = array('29.85'); $two = array('6.95','9.95','12.95'); $montantTotal = 0 ; foreach ($two as $lignes) { $montantTotal += floatval($lignes); } echo

我不明白结果是什么?!29.85-3.5527136788005E-15 PHP错误?与floatval或cast的结果相同 你能帮助我吗?下面是简单的示例代码:

<?php 
$new = array('29.85');
$two = array('6.95','9.95','12.95');
$montantTotal = 0 ;
foreach ($two as $lignes) {
    $montantTotal += floatval($lignes);
    }
echo $montantTotal ;
$result = $montantTotal - floatval($new[0]);
echo $result;

结果非常小。它使用科学记数法

 $montantTotal =  29.85
 $result = -3.5527136788005E-15
你可以用

语法

string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
示例

    $new = array('29.85');
    $two = array('6.95','9.95','12.95');
    $montantTotal = 0 ;
    foreach ($two as $lignes) {
        $montantTotal += (float)$lignes;
        }
   // echo $montantTotal ; echo "<br>";
    $result = number_format($montantTotal,8,".","") - number_format((float)$new[0],8,".","");
    echo $result;

这对于所有使用IEEE-754的语言来说都是很常见的,可能是E means
指数型的重复,并且由于浮点数学的缺陷,得到的数值非常小。要纠正此问题,您必须使用以获得正确的显示。如果您让一个人在一张纸上写下
1/3
的结果,他们可能会写下类似
0.3333333
的内容,但因为这张纸不适合所有数字,当他们做一个
0.333333*3
的时候,他们没有得到他们应该得到的1,而是像
0.9999999
那样。数学坏了吗?不,我们只是没有足够的纸张。计算机无法存储许多浮点数的精确值,比如(1/3)的结果。这就是为什么在进行浮点运算时,您应该保留舍入函数和浮点比较函数作为您的同伴
0