2012-02-29 7 views
1

Disons que j'ai deux nombres décimaux arbitraires (positifs), a et b. Je veux être capable de compter le nombre d'entiers qui existent entre a et b (un nombre inférieur ou égal à [nombre entier valide] qui est inférieur à b) de sorte qu'aucun d'entre eux ne dépasse le nombre arbitraire L. Y at-il un moyen facile de le faire? J'ai essayé des boucles et des planchers/plafonds, mais rien ne fonctionne comme je le veux et ça commence à être désordonné.Numéros de comptage dans une plage

+0

Pouvez-vous fournir des données d'illustration? –

+0

Je ne sais pas ce que cela signifie. Mais disons a = 56,67 et b = 67,8. Entiers valides = 57 à 67 (11 nombres). Mais si L = 62 ou quelque chose, alors entiers valides = 57 à 62 (7 nombres). –

+0

Ou, il pourrait être a = 5 et b = 10, auquel cas des entiers valides = 5, 6, 7, 8, 9, (5 chiffres) et ainsi de suite. –

Répondre

1

Le cas est simple:

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

Quoi qu'il en a des problèmes lorsque L est inférieur à la fois a et b, et ne répond pas à des nombres décimaux.

En tant que tel, donner un aller:

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

Désolé, édité ma publication initiale pour clarifier. a et b peuvent être des flottants mais les nombres valides dans la plage doivent être des entiers. –

+0

Mis à jour. Vous êtes un peu inconsistant dans vos échantillons, que vous soyez inclusif ou exclusif. –

+0

De quelle manière? a et b peuvent être n'importe quoi tant qu'ils sont positifs - c'est juste la recherche des valeurs entières qui existent entre eux (seulement caveat: l'entier valide peut être égal à a si a est un entier lui-même). Les entiers valides doivent également être inférieurs ou égaux à L (L sera toujours intégrale) –

Questions connexes