2
votes

Comment vérifier que ma double variable est un entier ou non?

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>


6 commentaires

car 5% 10 vaut 5 et non 0


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 que 1e100 == 10 ... 0 (100 zéros) est au-delà int.MaxValue


stackoverflow .com / questions / 9898512 /…


4 Réponses :


0
votes

Par exemple:

double d = 1.0;
bool isInt = d % 1 == 0;

modulo:

double d = 1.0;
bool isInt = d == (int)d;


0 commentaires

0
votes

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é> XXX


0 commentaires

0
votes

Comment 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, utilisez modf () 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
  ....

0 commentaires

-1
votes

Essayez avec typeOf:

if (myInt.GetType() == typeof(int))


1 commentaires

S'il s'agit d'une variable double, elle n'aura jamais le type int .