Il y a deux façons de diviser des nombres. La voie rapide et le lent. Beaucoup de compilateurs essayer de vous tromper en faisant la voie rapide. C# est l'un d'entre eux, essayez ceci:
using System;class Program {static void Main(string[] args){
Console.WriteLine(1/2);
Console.ReadLine();}}
De sortie: 0
Êtes-vous satisfait de ce résultat? Il est techniquement correct, le comportement documenté lorsque le côté gauche et le côté droit de l'expression sont des nombres entiers. Que fait un rapide division entière. Les IDIV instruction sur le processeur, au lieu de la (tristement célèbre) FDIV instruction. Également entièrement compatible avec la façon dont tous accolade langues de travail. Mais certainement une source majeure de "wtf qui s'est passé" questions. Pour obtenir l'heureux résultat que vous avez à faire quelque chose comme ceci:
Console.WriteLine(1.0/2);
De sortie: 0.5
Le côté gauche est maintenant un double, en forçant un floating point de la division. Avec le type de résultat de la calculatrice affiche. D'autres moyens d'invoquer FDIV est en faisant le côté droit d'un nombre à virgule flottante ou explicitement à la coulée de l'un des opérandes (double).
VB.NET ne fonctionne pas de cette façon, l'opérateur /est toujours à virgule flottante de division, indépendamment des types. Parfois, vous avez vraiment ne voulez une division entière. C'est ce que \.
Point intéressant que vous avez apporté. J'ai toujours compris la différence entre / et / en VB, mais il n'a jamais traversé mon esprit, pour quelque raison que ce est en train de faire le travail que la spécification des types de données dans C langues. Suppose que je peux revenir en arrière et supprimer toutes les D et F à partir de la fin de mes numéros de maintenant. =)
10 /3 = 3.33333333333333, assigned to integer = 3
10 \ 3 = 3, assigned to integer = 3
20 /3 = 6.66666666666667, assigned to integer = 7
20 \ 3 = 6, assigned to integer = 6
Code ci-dessus:
Dim a, b, c, d AsInteger
a =10/3
b =10\3
c =20/3
d =20\3
Debug.WriteLine("10 /3 = "&10/3&", assigned to integer = "& a)
Debug.WriteLine("10 \ 3 = "&10\3&", assigned to integer = "& b)
Debug.WriteLine("20 /3 = "&20/3&", assigned to integer = "& c)
Debug.WriteLine("20 \ 3 = "&20\3&", assigned to integer = "& d)
Il y a deux façons de diviser des nombres. La voie rapide et le lent. Beaucoup de compilateurs essayer de vous tromper en faisant la voie rapide. C# est l'un d'entre eux, essayez ceci:
De sortie: 0
Êtes-vous satisfait de ce résultat? Il est techniquement correct, le comportement documenté lorsque le côté gauche et le côté droit de l'expression sont des nombres entiers. Que fait un rapide division entière. Les IDIV instruction sur le processeur, au lieu de la (tristement célèbre) FDIV instruction. Également entièrement compatible avec la façon dont tous accolade langues de travail. Mais certainement une source majeure de "wtf qui s'est passé" questions. Pour obtenir l'heureux résultat que vous avez à faire quelque chose comme ceci:
De sortie: 0.5
Le côté gauche est maintenant un double, en forçant un floating point de la division. Avec le type de résultat de la calculatrice affiche. D'autres moyens d'invoquer FDIV est en faisant le côté droit d'un nombre à virgule flottante ou explicitement à la coulée de l'un des opérandes (double).
VB.NET ne fonctionne pas de cette façon, l'opérateur /est toujours à virgule flottante de division, indépendamment des types. Parfois, vous avez vraiment ne voulez une division entière. C'est ce que
\
.OriginalL'auteur Hans Passant
OriginalL'auteur neo2862
OriginalL'auteur Daniel A. White
Code ci-dessus:
OriginalL'auteur adrianwadey