看似简单,但找不到优雅的方式...我想检查一个值是否在一定范围内,但也使用有效的增量/分辨率。假设我的范围是0.1到99.9,分辨率为.1。有效值为1.1和1.2,但1.15无效。我该怎么检查?
答案 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.1
,d = 0.1
,a[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)