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

How do I filter out floats with integers [logic]

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

例如:

array_n = [n]; //一个浮点数数组 k = 160。

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

有什么想法吗?

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

设 x 为最接近整数的四舍五入数。

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

我打算使用 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
}

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

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