0

シンプルに見えますが、エレガントな方法が見つかりません...値が特定の範囲内にあるかどうかを確認したいだけでなく、有効な増分/解像度を使用しています。私の範囲が 0.1 から 99.9 で、解像度が .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);

ここで、イプシロンは非常に小さな「間違い」の値です

于 2012-09-04T15:25:15.380 に答える
0

あなたは算術進行を扱っています。あなたの例a[1] = 0.1d = 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 はプログレッションのメンバーです。でも:

(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 に答える