Comment vérifier si un nombre est divisible en c#?
J'ai besoin de savoir comment faire cette procédure.
calculation1: 1/4 = 0,25
calculation2: 1/8 = 0,125
calculation3: 47/183 = 0,25683060109289617486338797814207......
calculation4: 58/889 = 0,06524184476940382452193475815523......
calculation5: 1/5 = 0,2
Les résultats des calculs 1, 2 et 5, une courte résultat, pas de périodes ou et interminable chaîne de chiffres. Les résultats des calculs 3 et 4 sont très long et très compliqué.
Comment puis-je vérifier dont le calcul est "facile" et donne une "courte".
J'ai essayé et ça a donné un résultat faux pour vous...
comme vous pouvez le voir, les résultats des calculs ont le type de données double
dans mon application.
static bool IsInt(double x)
{
try
{
int y = Int32.Parse(x.ToString());
return true;
}
catch
{
return false;
}
}
J'espère que c'est clair ce que je demande.
Ce que Tout informaticien Devez Savoir à Propos de l'Arithmétique à virgule Flottante
Définir précisément vos critères pour un certain nombre d'être "facile" et un numéro de "pas facile". Votre code sera à suivre en direct de la mode. Le problème n'est pas de codage, mais exprimant précisément à vos besoins.
Demandez-vous si le résultat est un rationnel v. nombre irrationnel? Ou tout simplement est-il d'un numéro court (elles comprennent toutes les décimales, donc je ne suis pas sûr de ce que tu veux dire par pas de période)
Tous ses exemples sont rationnels, même s'il est d'oublier la résolution limitée de
Puisque toutes les valeurs à virgule flottante ne peut pas exprimer les suites infinies, par définition, tous les float/double est rationnel et a un nombre fixe de [maximale] chiffres après la virgule.
Définir précisément vos critères pour un certain nombre d'être "facile" et un numéro de "pas facile". Votre code sera à suivre en direct de la mode. Le problème n'est pas de codage, mais exprimant précisément à vos besoins.
Demandez-vous si le résultat est un rationnel v. nombre irrationnel? Ou tout simplement est-il d'un numéro court (elles comprennent toutes les décimales, donc je ne suis pas sûr de ce que tu veux dire par pas de période)
Tous ses exemples sont rationnels, même s'il est d'oublier la résolution limitée de
double
.Puisque toutes les valeurs à virgule flottante ne peut pas exprimer les suites infinies, par définition, tous les float/double est rationnel et a un nombre fixe de [maximale] chiffres après la virgule.
OriginalL'auteur Abi | 2012-08-23
Vous devez vous connecter pour publier un commentaire.
Si après la réduction de la fraction autant que possible, le dénominateur peut être exprimé comme une puissance de 2 multiplié par une puissance de 5, puis la représentation décimale se termine. Sinon, il se répète indéfiniment.
Vous pouvez tester si votre division est "bonne", comme suit:
Voir en ligne: ideone
Remarque que je suis de passage le numérateur et le dénominateur séparément à la méthode. Si vous ne la division d'abord, puis de transmettre le résultat de votre méthode, vous perdez précision à virgule flottante représentation d'erreur.
Également pour la production de code que vous devez vérifier que
b != 0
car il n'est pas permis de diviser par 0. Sans vérifier le code ci-dessus serait d'aller dans une boucle infinie.+1 pour l'intelligence du présent. Mais, n'est-il pas plus pratique de considérer les implications techniques de cette question? En d'autres termes, ce ratio déborder le type de données?
Génial! Merci, il est à chaque fois quelque chose de nouveau à apprendre!
Agréable, propre solution. Vous pouvez ajouter un compteur pour les 2s et 5s afin de s'assurer que la solution n'a pas trop de chiffres après la virgule. Mais ce serait seulement une supposition à partir de l'échantillon original, pas la question d'origine.
OriginalL'auteur Mark Byers
Je suppose que cela dépend de votre définition d'un "bon résultat" ou "facile". Mais je pense que ce que vous voulez, c'est le Le Module Opérateur.
OriginalL'auteur CodingGorilla