12
votes

C # - Valeurs de temps d'arrondi à l'heure du trimestre le plus proche

Quelqu'un a-t-il un bon moyen de ronder down un nombre compris entre 0 et 59 au 15 le plus proche. J'utilise C # 3.5.

SO ...

  • 1 serait 0
  • 29 serait 15
  • 30 serait 30

    etc etc.

    Merci beaucoup.


0 commentaires

6 Réponses :


5
votes

Que diriez-vous (x / 15) * 15?


1 commentaires

Vous devrez vous assurer que X est un type entier, tout d'abord, cependant ... (ou, au moins, Cast X / 15 à int)



3
votes

Vous pouvez utiliser une division entière -

int number = 43;
int newNumber = number / 15;
int rounded = newNumber * 15;


0 commentaires

16
votes

comme méthode d'extension sur la dateTime xxx

à utiliser xxx


2 commentaires

Assurez-vous d'adapter un motif d'usine abstrait quelque part pour un design plus découplé.


Hey, je suis une méthode d'extension junkie. Je n'offre aucune excuse; p



28
votes

x = x - (x% 15) serait une solution qui ne s'appuie pas sur la division entière.


0 commentaires

4
votes

Je ne connais pas d'un appel de bibliothèque pour cela (comme .Round (...)), peut-être et une méthode d'extension s'adapterait bien?

J'irais pour une déclaration simple. P>

Si la vitesse est un problème, essayez une instruction de commutation expansée pour chaque valeur. Utilisez des tests d'unités pour voir ce qui est plus rapide si c'est un problème. P>

Pour être complet ... P>

public static class Ext
{
    public static int RoundDown(this int val)
    {
        if (val < 0)
            return 0;
        if (val < 15)
            return 0;
        if (val < 30)
            return 15;
        if (val < 45)
            return 30;
        return 45;
    }
}


3 commentaires

Il pourrait également utiliser un cadre moqueur pour se moquer de l'entier aussi pour une meilleure vérification (plus sans toutes les frais générales de l'allocation entière sur la pile)


euh non ... Le chronométrage est parce que je suppose que c'est sur un site Web et il y a probablement beaucoup de choses en cours, c'est tout ...


mon hypothèse est que 0 est la limite inférieure (59 la tige)



0
votes

C'est ici que l'opérateur de modulus est très pratique xxx


0 commentaires