【问题标题】:php comparing two numbers togetherphp比较两个数字
【发布时间】:2012-04-04 13:57:35
【问题描述】:

PHP 是否有某种可以比较数字的函数?我知道他们有像similar_text() 这样的文本比较但是说我想比较纬度/经度值,它们非常相似但差别很小

示例:

place 1 

lat: 34.095161
lng: -117.720638

compare with

lat: 34.0948841
lng: -117.7206854

place 2

lat: 34.094572563643
lng: -117.72184828904

compare with 

lat: 34.094112
lng: -117.7250746

它们可能彼此非常接近,我希望能够获得一定的范围?我可以使用一些 PHP 函数吗?

谢谢

【问题讨论】:

  • 为什么不只是 round() 他们达到你想要的任何程度的准确度?
  • similar_text 计算两个字符串之间的一种“距离”。对于数字,等价于abs($lat1 - $lat2)
  • @Interrobang 我不想四舍五入,因为四舍五入 lat 和 lng 会导致不良结果
  • @ruakh 我不明白为什么绝对值会与similar_text 相似,虽然这对我获得绝对值很有帮助,我可以检查一个范围,但是你用你的语句表达的方式似乎绝对值会给你一个不正确的两个数字之间的比较。
  • @andrewliu:两个数之间的绝对值他们之间的比较。绝对值越大,距离越大。

标签: php function comparison numbers


【解决方案1】:

我认为没有内置函数。也许您可以使用欧几里得距离来计算它们的相似度,这是一种易于实现的方法。

$diff = sqrt((($lat1 - $lat2) * ($lat1 - $lat2)) + (($lng1 - $lng2) * ($lng1 - $lng2)));
$epsilon = 0.0001;
if ($diff < $espilon) {
    echo 'we consider them equal';
} else {
    echo 'they are different';
}

注意:$diff 在这里是对差异的纯粹量化,您不能将 lat/lng 值视为形成二维点,其距离可以通过欧几里得方法严格计算(参见 here why

【讨论】:

  • 使用pow 通常比将两个值相乘要慢。我建议将您的第一行更改为sqrt((($lat1 - $lat2) * ($lat1 - $lat2)) + (($lng1 - $lng2) * ($lng1 - $lng2)))。结果可读性较差,但通常更快。 =)
  • 我相信这会让我知道如何处理我的代码...谢谢
  • 暂时不会,按照我要去的速度。 =)
【解决方案2】:

还可以查看Haversine formula。通常用于查看球体上两点之间的距离有多大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多