J'ai une variable de:
private void button2_Click(object sender, EventArgs e) { int r = 10; int l = 2; double d = r / l; if (d % 10 == 0) { Console.WriteLine("INTEGER"); } else { Console.WriteLine("DOUBLE"); } }
Je veux faire ce qui suit:
if ( result%10 == 0 ){ ... }
Comment puis-je faire cela? p>
J'ai aussi essayé ceci, mais cela n'a pas fonctionné:
if( result == int ) { //Do Something... } else{ //Do another thing... }
Dans un exemple:
double result = myList.Count / mySeptum;
p>
4 Réponses :
Par exemple:
double d = 1.0; bool isInt = d % 1 == 0;
modulo:
double d = 1.0; bool isInt = d == (int)d;
En général, un nombre à virgule flottante sur un ordinateur ne peut pas représenter tous les nombres réels mais seulement quelques valeurs discrètes. Ainsi, seulement pour quelques entiers, il sera possible qu'un double puisse être mathématiquement identique à une valeur entière. Pour la plupart des entiers, le double le plus proche sera légèrement décalé. Donc, si vous cherchez des correspondances exactes, cela ne fonctionnera pas.
Cependant, ce que vous pouvez faire est de convertir votre double en entier et de vérifier si la différence entre le double et l'entier est suffisamment petite:
< pré> XXXComment vérifier que ma double variable est un entier ou non?
D'un point de vue C (puisque l'article était initialement balisé):
(Je suis certain que C # a des fonctions équivalentes.)Pour déterminer si un
double
est un nombre entier, utilisezmodf ()
pour renvoyer la partie fractionnaire .#define INT64_MAX_P1 ((INT64_MAX/2 + 1)*2.0) if (ipart >= INT64_MIN && ipart < INT64_MAX_P1) { int64_t i64 = (int64_t) ipart;Pour tester plus avant s'il est dans la plage
int
if (ipart >= INT_MIN && ipart <= INT_MAX) { int i = (int) ipart;
Pour vérifier les types entiers plus larges, nous avons besoin de quelques astuces pour garantir l'absence d'erreur d'arrondi lors de la formation des limites. Le code tire parti du fait que
INT ..._ MAX
sont des numéros de Mersenne#include <math.h> double x = ....; double ipart; if (isfinite(x) && modf(x, &ipart) == 0.0) { // value is a whole number ....
Essayez avec typeOf:
if (myInt.GetType() == typeof(int))
S'il s'agit d'une variable double, elle n'aura jamais le type int
.
car
5% 10
vaut 5 et non0
Double possible de Récupérer la partie décimale d'un double S'il n'y a pas décimales => c'est un entier.
Votre test vérifie si le dernier chiffre est zéro. Vous pouvez essayer
si ((r% l) == 0)
Doit jeter un oeil à: stackoverflow.com/questions/2751593/...
Considérez-vous que
1.0e100
est un entier ? Veuillez noter que1e100 == 10 ... 0 (100 zéros)
est au-delàint.MaxValue
stackoverflow .com / questions / 9898512 /…