2010-06-22 6 views
1

Je souhaite diviser la taille d'un contrôle par la taille d'un formulaire et souhaite obtenir sa valeur plancher. Je pensais ce qui serait retourné quand j'essayerais de diviser un entier avec un entier et de stocker à nouveau son résultat dans un integer.Ce qui sera renvoyé lors de la division d'entier avec un nombre entier et de la valeur renvoyée dans un entier

Je veux seulement la valeur plancher. J'ai essayé d'utiliser Math.Floor, Math.Truncate mais il me montre une erreur que l'appel entre methods is ambigious suivant parce que le compilateur n'est pas capable de comprendre quel type de valeur sera retourné après avoir plongé, c'est-à-dire décimal ou double.

Cela me reviendra-t-il une valeur plancher si je n'utilise pas une telle fonction. Je ne veux que la valeur plancher.

 Nullable<int> PanelCountInSingleRow = null; 
     Nullable<int> widthRemainder = null; 

     //setting the size of the panel 
     CurrentControlSize = PanelView.Size; 
     //Calculate no of Panels that can come in a single row. 
     PanelCountInSingleRow = Math.Floor(this.Size.Width/CurrentControlSize.Width); 
+0

Que diriez-vous montrer votre code pour commencer? – Gary

+0

@Gary: Bien sûr, je mets mon code –

+0

Comme un contrôle est généralement plus petit que le formulaire, la division entière de la taille du contrôle par la taille du formulaire se traduira toujours par 0. Mais oui, ce sera un entier qui représente la valeur plancher du résultat. –

Répondre

4

division entière arrondit vers 0. Pas tout à fait la même chose que de prendre la parole (en raison des nombres négatifs arrondi « vers le haut » vers 0) mais je suis en supposant que vos tailles sont de toute façon non négatif. A partir de la spécification C# 4, section 7.8.2:

La division arrondit le résultat vers zéro. Ainsi, la valeur absolue du résultat est le plus grand entier possible qui est inférieur ou égal à la valeur absolue du quotient des deux opérandes . Le résultat est zéro ou positif lorsque les deux opérandes ont le même signe et zéro ou négatif lorsque les deux opérandes ont des signes opposés.

(Notez que ceci est spécifiquement pour la division entière. Division à virgule flottante Il est évident que ne le fait pas!)

Donc, fondamentalement, vous devriez être en mesure de supprimer l'appel Math.Floor.

Si vous voulez obtenir le reste aussi bien, vous pouvez utiliser Math.DivRem:

int remainder; 
int count = Math.DivRem(Size.Width, CurrentControlSize.Width, out remainder); 
+0

Merci pour l'info, j'ai 1 question Plus sur votre édition de reste. Cela me rapportera-t-il une valeur décimale fixe ou autre chose? par exemple. Dans ce cas 10/3? reste serait 333333 jusqu'à?, dans 5/2? 5 comme 50 ou quoi –

+0

@Shantanu: Non, il retournera le * reste * - donc pour 10/3, le reste serait 1, parce que c'est ce qui reste après avoir divisé 10 par 3. Idem 5/2 est 2 reste 1. 8/2 serait 4 reste 0, 11/3 serait 3 reste 2 etc. Voir les documents pour plus de détails. –

+0

oups sry, n'a pas pensé ce que je demande. Oui, tu as raison. –

Questions connexes