如何使用整数过滤浮点数[逻辑]

时间:2015-02-22 19:46:28

标签: matlab floating-point integer floating-point-precision

我有一系列花车。其中一些浮点非常接近整数,但它们仍然是浮点数。我需要过滤这些值。

例如:

array_n = [n]; //一系列浮点数 k = 160.

在if循环中,n是array_n中的元素。我需要使用k从数组中选择n。我已经尝试过做n%k< = k,但它只是不起作用。我尝试通过执行n%1< = .000000001来过滤掉接近整数的数字,但是当我执行n%1时,某些值变为1(我真的不确定为什么或如何)。

有什么想法吗?

我正在使用MATLAB,但我认为这个问题适用于任何语言。

3 个答案:

答案 0 :(得分:2)

让x为最接近的整数的舍入数。

如果abs(x - 数字)<阈值,那么这个数字是一个整数。

答案 1 :(得分:0)

我和C#一起去,因为那是我所知道的,对不起:

bool IsIntegerish(float f)
{
    const float epsilon = 0.000000001; // using epsilon from OP
    return abs(f - (int)f) < epsilon;
}

使用(在C#中,无论如何):

foreach (var i in myFloats.Where(f => !IsIntegerish(f)))
{
    // do something useful
}

答案 2 :(得分:0)

您应该使用相对而不是绝对容错:

tolerance = 1e-3;
a( abs(a-round(a)) < tolerance*(eps(a)/eps) )