C#以有效增量检查值范围

时间:2012-09-04 15:17:54

标签: c#

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

6 个答案:

答案 0 :(得分:0)

您可以使用%运算符:

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

输出:false

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

输出:true

答案 1 :(得分:0)

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

(x * 10) % 1 == 0

答案 2 :(得分: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是一个非常小的“错误”值

答案 3 :(得分:0)

您正在处理arithmetic progression。在您的示例中a[1] = 0.1d = 0.1a[999] = 99.9。如果您的号码x是进展的n成员,则以下内容成立:

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

所以你必须检查是否

(x - a[1])/d

是一个非整数整数。例如:

(1.1 - 0.1)/0.1 = 10
因此,1.1是进展的成员。但是:

(1.15 - 0.1)/0.1 = 10.5

因此1.15不是进展的成员。

答案 4 :(得分:0)

尝试使用此代码

decimal yourDecimal = ;

if( yourDecimal % .1M == 0 )
{
    ......
}

答案 5 :(得分:0)

考虑使用Math.Round强制它达到您想要的精度。您的申请中1.999和1.2之间有什么区别? (另见this SO question