在Rails中减去变量

时间:2015-03-14 04:01:07

标签: ruby-on-rails ruby

我试图查看一个点是否在一个圆圈内。我正在使用毕达哥拉斯定理进行检查,但是当我使用它时,我得到undefined method - ' for" 37.33259551999998":String`。如何减去这些变量?

 def getalerts
            alerts = Alert.all
            school = School.find_by_school_name(params[:school])
            latitude = params[:latitude]
            longitude = params[:longitude]
            radius = school.radius
            alertArray = Array.new()

            alerts.each do |alert|
              d = Math.sqrt(((alert.latitude - school.latitude)**2) + (alert.longitude - school.longitude)**2)

              if d < radius
                alertArray["latlng"] = alert.latitude, alert.longitude 
              end
            end
            respond_to do |format|
              format.json { render json: alertArray}      
            end
    end 

3 个答案:

答案 0 :(得分:0)

从错误消息中可以清楚地看到,对字符串执行减法选项,因此它无效。您可以使用to_i方法将字符串转换为整数。所以试试这个:

d = Math.sqrt(((alert.latitude.to_i - school.latitude.to_i)**2) + (alert.longitude.to_i - school.longitude.to_i)**2)

此外,如果您希望将它们转换为浮动值,则必须使用to_f方法。

答案 1 :(得分:0)

在警报和学校纬度和经度上使用to_f

转换为float将保留小数点数(与to_i不同)

d = Math.sqrt(
  ((alert.latitude.to_f - school.latitude.to_f)**2)
  + (alert.longitude.to_f - school.longitude.to_f)**2)

答案 2 :(得分:0)

卡里提出了正确的观点。即使最初的问题是关于要求减去浮点数的字符串表示的技术问题,真正的问题是你需要计算地球上两点之间的距离。这是一个关于hasrsine公式的红宝石实现

https://github.com/kristianmandrup/haversine/blob/master/lib/haversine.rb