2010-12-13 6 views
2

Comment obtenir le point décimal d'un nombre? Par exemple:
Si j'ai 1,5 comment obtenir le numéro 5?Afficher le point décimal

+0

Désolé, je ne comprends pas la question. Quels sont les types que vous voulez gérer? Vous avez un double, et vous aimeriez la représentation décimale après la virgule dans un int? Vous aimeriez avoir 5 stockés dans un int? Pourquoi 5 et pas 50? – Benoit

+0

@Benoit parce que je suis seulement intéressé par le premier chiffre après le point. –

+0

... Pourquoi auriez-vous besoin du "premier chiffre après le point", mais rien d'autre? –

Répondre

4
int result = static_cast<int>(fmod(number, 1)*10); 

EDIT: ou plus simple et probablement plus rapide:

int result = static_cast<int>(number*10)%10; 

EDIT: pour le faire fonctionner aussi pour les nombres négatifs que vous pouvez faire:

int result = abs(static_cast<int>(number*10))%10; 
+0

vous m'avez battu à l'heure;) – BlackBear

+0

si nous ne connaissons pas la position du point décimal, je veux dire comment résoudre ce problème en général pour un numéro de float donné comme 12.76, 164.7, 8759.128756, etc? – Rasoul

+0

@Rasoul: La solution fonctionne dans toutes les situations, elle vous donne toujours le premier chiffre décimal. –

2

Supposons que vous avez x=234.537

floor(x*10) vous donne 2345

vous alors besoin juste pour obtenir le reste d'une division par 10

Alors:

int firstDecimal = floor(x*10)%10

+1

'int firstDecimal = floor (x * 10)% 10' ne compilera même pas. 'floor' est de type virgule flottante, mais'% 'requiert non-float (int, unsigned, etc.). –

+0

Je ne donnais pas de réponse spécifique à la langue. Cela peut être utilisé dans presque toutes les langues. Vous pourriez avoir besoin d'un cast en C++. – nico

1

ici:

(int) (n*10) % 10 
+0

Que faire si n est négatif? Cela fonctionnerait-il? – Nawaz

+0

@Nawaz: Peut ou non. Cela dépend de la plate-forme (matériel). –

+0

Je pensais la même chose! – Nawaz

1

Il y a une façon simple et agréable de le faire.

int GetFirstDecimalPlace(float f) 
{ 
    const float dp = f - floorf(f); // This simply gives all the values after the 
             // decimal point. 
    return static_cast<int>(dp * 10.0f); // This move the value after the decimal 
              // point to before it and then casts to an 
              // int losing all other decimal places. 
} 
1

Une façon de travailler avec des nombres négatifs en utilisant aucune macro/appels de fonction:

n < 0 ? (int) (-n * 10) % 10 : (int) (n * 10) % 10 
+0

Trop compliqué. Peut être 'static_cast ((n> = 0? N: -n) * 10)% 10'. Mais je ne vois aucune raison, pourquoi ne pas appeler abs(). –

+0

Vous avez raison, de cette façon c'est plus simple. Et il n'y a aucune raison de ne pas tous les abs() sauf peut-être pour des raisons de performance, mais c'est négligeable. Je voulais juste montrer un moyen de le faire en utilisant des outils fournis par le langage, pas la bibliothèque. Une raison d'utiliser static_cast au lieu de juste (int), au fait? –

+0

Merci pour votre réponse. La raison de l'utilisation de static_int au lieu de just (int) est de marquer des endroits dans le programme où des lancements explicites sont effectués. Cela est fait pour des raisons de lisibilité. –

Questions connexes