看起来很简单,但找不到优雅的方式......我想检查一个值是否在一定范围内,但也使用有效的增量/分辨率。假设我的范围是 0.1 到 99.9,分辨率为 0.1。有效值为 1.1 和 1.2,但 1.15 无效。我将如何检查?
问问题
1831 次
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
。如果您的号码x
是n
进度的第 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 回答