我有一系列花车。其中一些浮点非常接近整数,但它们仍然是浮点数。我需要过滤这些值。
例如:
array_n = [n]; //一系列浮点数 k = 160.
在if循环中,n是array_n中的元素。我需要使用k从数组中选择n。我已经尝试过做n%k< = k,但它只是不起作用。我尝试通过执行n%1< = .000000001来过滤掉接近整数的数字,但是当我执行n%1时,某些值变为1(我真的不确定为什么或如何)。
有什么想法吗?
我正在使用MATLAB,但我认为这个问题适用于任何语言。
答案 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) )