比较两个浮点值

时间:2015-07-24 19:14:40

标签: ruby floating-point comparison

我想比较两个浮点数并返回true,如果它们的整个部分(小数点左边)相等而且它们的分数(十进制数)都是> = .5或< = .5。

我这样做的方法是将浮点数转换为字符串,并通过在'.'上分隔并在if语句中进行两次比较来标记每个浮点数的两个部分(整数/分数)。

2 个答案:

答案 0 :(得分:1)

您无需转换为字符串:

def compare_two_floats(float1, float2)
    if float1.truncate == float2.truncate #checks if left side is equal. Goes to else block and returns false if not. 
        float1 -= float1.truncate #now subtracts the "whole number" portion
        float2 -= float2.truncate
        if (float1 < 0.5) && (float2 < 0.5)
            return true
        elsif (float1 >= 0.5) && (float2 >= 0.5)
            return true
        else
            return false
        end             
    else
        return false
    end
end

puts compare_two_floats(1.3,1.7)
puts compare_two_floats(2.3,1.7)
puts compare_two_floats(1.3,1.3)
puts compare_two_floats(1.3,3.3)

这很有效,对我有用。首先,使用Ruby为Float类提供的#truncate方法检查左侧。

如果左侧相等,它将继续评估小数。如果不是,则返回false并退出方法。

如果左侧相等,则方法继续减去每个浮点的截断(或左侧),使其小于1.

然后比较以查看它们是否小于0.5或大于或等于0.5。

相应地返回true / false。

答案 1 :(得分:0)

如果您可以更改您的问题,那么:

  • “= .5”案例仅与“&gt; .5”案例分组,而不是“&lt; .5”案例,
  • 您不需要考虑负数,

然后,

float1.round == float2.round
相关问题