2013-05-22 7 views
0

Je dois supprimer les chiffres après les virgules mais pas tous.Suppression de quelques chiffres après la virgule décimale en C++

Par exemple, double dig = 3,1459038585 i besoin de le convertir à creuser = 3,14

Je pense que je dois plusieurs creuser à 100 puis le convertir en entier puis convertir à nouveau de doubler et de supprimer 100 (Tous ce sera une ligne). Mais y a-t-il une fonction pour le faire plus rapidement?

+1

Voir http://stackoverflow.com/questions/4030190/rounding-to-the-second-decimal-spot – devnull

+0

son pour l'impression, je voulais écrire PS pour ces réponses. Je dois supprimer les chiffres et utiliser de nouveaux chiffres dans les calculs. – EmiX

+0

@devnull cette question concerne la sortie de formatage, pas le traitement interne. –

Répondre

3
#include <cmath> 
#include <iostream> 
int main() 
{ 
    double d = 3.1459038585; 
    std::cout << std::floor(d * 100.)/100. << std::endl; 
} 
+0

Ceci est en fait incorrect car il ne traitera pas correctement les négatifs. Il reviendra -3.15 si vous retournez le signe sur votre d. La version de Niels est (presque) correcte. – Corvin

+0

@Corvin: C'est une idée fausse commune. [Il existe plusieurs types d'arrondis] (https://en.wikipedia.org/wiki/Rounding#Tie-breaking). La méthode ci-dessus montre juste un style d'arrondi, qui peut ou non correspondre à votre cas d'utilisation. –

2

Toute fonction implémentant cette fonctionnalité sera plus flexible et, par conséquent, plus lente par définition. Alors oui, il suffit d'écrire ceci:

double truncated = (double)((int)dig*100)/100; 

Il est de toutes les opérations natif CPU toute façon il vous en coûtera à peine tous les cycles d'horloge, surtout si inline ou utilisé comme une macro.

+0

Correct mais une petite faute de frappe. Il devrait être (double) ((int) (dig * 100))/100 - notez les parenthèses après (int). Sinon, dig est converti (tronqué) avant d'être multiplié. – Corvin

Questions connexes