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";