シンプルに見えますが、エレガントな方法が見つかりません...値が特定の範囲内にあるかどうかを確認したいだけでなく、有効な増分/解像度を使用しています。私の範囲が 0.1 から 99.9 で、解像度が .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);
ここで、イプシロンは非常に小さな「間違い」の値です
于 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 はプログレッションのメンバーです。でも:
(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 の違いは何ですか? (このSOの質問も参照してください)
于 2012-09-04T15:31:33.463 に答える