2012-02-29 13 views
1

と言うと、aとbの2つの(正の)任意の小数があります。範囲内の数値を集計する

aとbの間に存在する整数の数を(bより小さい[Valid Integers]より小さい)任意の数Lを超えないように数えたいと思っていますこれを行う簡単な方法は?私はループと床/天井を試しましたが、どれもそれが欲しいと思うように働いていません。ちょうど乱雑になりつつあります。

+0

はあなたがイラストデ​​ータを提供することができ:このよう

、これはやってみますか? –

+0

これが何を意味するのかよく分かりません。しかし、a = 56.67、b = 67.8と言う。有効な整数= 57〜67(11個の数字)。しかし、L = 62か何かの場合、有効な整数= 57から62(7つの数字)。 –

+0

または、a = 5およびb = 10(有効な整数= 5,6,7,8,9、(5個の数字)など)とすることができます。 –

答えて

1

単純なケースは次のとおりです。

Count = Math.Min(Math.Max(a, b), L) - Math.Min(a,b); 

をしかしLabの両方よりも小さいときに問題があり、小数を世話しないこと。

int Count(double firstInput, double secondInput, double limit = int.MaxValue) 
{ 
    int minInput = (int)Math.Ceiling(Math.Min(firstInput, secondInput)); 
    int maxInput = (int)Math.Floor(Math.Max(firstInput, secondInput)); 

    int L = (int)Math.Floor(limit); 

    if (L<minInput) 
     return 0; 

    bool maxInputHasDecimals = (maxInput != Math.Max(firstInput, secondInput)); 
    return Math.Min(maxInput, L) - minInput + (maxInputHasDecimals ? 1 : 0); 
} 

Count(56.67, 67.8); // 11 
Count(56.67, 67.8, 62.0); // 6 
Count(56.67, 67.8, -3); // 0 
Count(-10, -5, -3); // 5 
Count(-10, -5, -7); // 3 
Count(56.67, 67.0); // 10 
+0

申し訳ありません、私の最初の投稿を編集して明確にしました。 aとbは浮動小数点数にすることができますが、範囲内の有効な数値は整数でなければなりません。 –

+0

が更新されました。包括的で排他的であるかどうかについては、あなたのサンプルで少し矛盾しています。 –

+0

どういう意味ですか? aとbは、それらが正である限り何でも構いません - それはそれらの間に存在する整数値を探しているだけです(注意:有効な整数はaが整数である場合aと等しくなります)。有効な整数もL以下でなければなりません(Lは常に整数になります) –

関連する問題