$a = 12345678912345678.8;
$b = 12345678912345678.9;
就这2个不同数字,if($a == $b){echo '相等';}结果输出‘相等’,我知道是太大超出他的范围,单独输出$a的结果是:1.2345678912346E+16十六进制的,请问像这种大的数据如何比较最好?
$a = 12345678912345678.8;
$b = 12345678912345678.9;
就这2个不同数字,if($a == $b){echo '相等';}结果输出‘相等’,我知道是太大超出他的范围,单独输出$a的结果是:1.2345678912346E+16十六进制的,请问像这种大的数据如何比较最好?
$a = 12345678912345678.8;
$b = 12345678912345678.9;
$a = (string)$a;
$b = (string)$b;
if ($a == $b) {
echo '相等';
}
经过自己电脑上测试当长度超过14位时, PHP就会益出。 不一样的系统 不一样的PHP版本长度益出会不一样。
相关资料 官方手册
方法1:
$a = '12345678912345678.6';
$b = '12345678912345678.9';
if($a == $b) {
echo 1;
}
方法2:
这里只提供下思路
如果想要直接通过浮点来比较没有找到方法。
先将以.分隔
获取整数部分位数,比较长度,再比较大小。
诺整数部分相等再比较小数部分。
Tip:考虑到数的无限大,也要注意分隔之后的数长度的益出,若益出再进行分隔。
<?php
$a = 12345678912345678.8;
$b = 12345678912345678.9;
if (strval($a) == strval($b)) {
echo '相等';
}
?>
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
2 回答817 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.3k 阅读
1 回答705 阅读✓ 已解决
你在赋值的时候精度已经丢失,除非在一开始的时候就使用字符串