0

看起来很简单,但找不到优雅的方式......我想检查一个值是否在一定范围内,但也使用有效的增量/分辨率。假设我的范围是 0.1 到 99.9,分辨率为 0.1。有效值为 1.1 和 1.2,但 1.15 无效。我将如何检查?

4

6 回答 6

1

您可以使用%运算符:

float i = 1.15;
Console.WriteLine((decimal)i % .1M == 0);

输出:false

float i = 1.1;
Console.WriteLine((decimal)i % .1M == 0);

输出:true

于 2012-09-04T15:21:50.880 回答
0

尝试这样的事情(对于 0.1 分辨率):

(x * 10) % 1 == 0
于 2012-09-04T15:23:08.283 回答
0

请试试:

        double a = 0.1;
        double b = 99.9;
        double x = 1.5;
        double range = 0.5;
        double epsilon = 0.000001;

        bool isRange = (x >= a) && (x <= b) && (Math.Abs((x - a)%range) < epsilon);

这里 epsilon 是一些非常小的“错误”值

于 2012-09-04T15:25:15.380 回答
0

您正在处理算术级数。在您的示例a[1] = 0.1中,d = 0.1, a[999] = 99.9。如果您的号码xn进度的第 th 成员,则以下情况成立:

n = (x - a[1])/d + 1

所以你必须检查是否

(x - a[1])/d

是一个非负整数。例如:

(1.1 - 0.1)/0.1 = 10

因此1.1是progression的成员。然而:

(1.15 - 0.1)/0.1 = 10.5

因此 1.15 不是进展的成员。

于 2012-09-04T15:25:59.093 回答
0

尝试使用此代码

decimal yourDecimal = ;

if( yourDecimal % .1M == 0 )
{
    ......
}
于 2012-09-04T15:31:26.557 回答
0

考虑使用Math.Round将其强制为您想要的精度。您的应用程序中的 1.999 和 1.2 有什么区别?(另见这个问题

于 2012-09-04T15:31:33.463 回答