Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将大浮点数与它进行比较';s字符串等价物_Php_String_Floating Point - Fatal编程技术网

Php 将大浮点数与它进行比较';s字符串等价物

Php 将大浮点数与它进行比较';s字符串等价物,php,string,floating-point,Php,String,Floating Point,有人能解释为什么不可能将大浮点数与其等效字符串进行比较: 这个例子: $f = 1234567890123456789.0; $s = (string)$f; var_dump($f, $s, $f == $s); 将导致: float(1.2345678901235E+18) string(19) "1.2345678901235E+18" bool(false) 为什么比较为假?浮点运算: $f = 1234567890123456789.0; $s = (string)$f; ech

有人能解释为什么不可能将大浮点数与其等效字符串进行比较:

这个例子:

$f = 1234567890123456789.0;
$s = (string)$f;
var_dump($f, $s, $f == $s);
将导致:

float(1.2345678901235E+18)
string(19) "1.2345678901235E+18"
bool(false)

为什么比较为假?

浮点运算:

$f = 1234567890123456789.0;
$s = (string)$f;

echo(serialize($f));
echo "\n";
echo(serialize($s));


-这就是为什么要使用delta
if(abs($f-$s)<1.0e-15)回显“匹配”来比较浮点值问题不在于比较两个浮点数,因为这两个数字将以相同的方式转换为浮点数-第一个由编译器转换,第二个由比较时的引擎转换。真正的问题是转换为字符串时的精度降低-多亏了@AbraCadaverAh yea,这就是问题所在:第一个浮点数转换为字符串时的精度降低。我用
ini_集(“精度”,“32”)测试它比它好:)-谢谢!
d:1.2345678901234568E+18;
s:19:"1.2345678901235E+18";