2017-04-25 4 views
-2

Je cherche à supprimer les zéros de fin de la variable double et affecter le résultat à double variable.C++: Supprimer les zéros de fin de la partie fractionnaire de la variable double

S'il vous plaît noter que

  1. Je suis sur C++ 98.
  2. Je ne cherche pas à imprimer (en utilisant snprintf, ou Cout printf avec% g); Je cherche à enlever le zéro de fin et assigner le reste à la double variable.

entrée: double (par exemple 100,250 ou 100,1010 ou 100,375)

sortie: double (100,25, 100,101, 100,375)

par exemple

double Price = 100.250; 
double convert = TrimZeros(100.250); 
// convert = 100.25 
  • I essayé de convertir le double à stringstream, et égalise le zéro final de cette chaîne. Cependant, je suis incapable de le convertir en double après la coupe (avec la précision requise).

par exemple.

double Price = 100.250; 
ostringstream osPrice; 
osPrice << fixed << Price; 
string cPrice = TrimString(osPrice.str()); // my function to trim trailing zero of string 
//cPrice = "100.25" 

// Now When I try to convert cPrice back to double, it adds extra zeros i.e. 100.250000 

Je suis très bien avec quoi que ce soit, à savoir - Une fonction directe de rogner les zéros de double et attribuer revenir à variable double le reste.

OU

  • Convertir double à cordes, découpez les zéros de chaîne et reconvertir correctement doubler.

Veuillez nous aider.

+2

Um ... vous ne pouvez pas vraiment supprimer les chiffres d'un nombre de la façon que vous décrivez. Si vous ne voulez pas de zéros de fin dans une représentation de chaîne, il suffit de les supprimer s'ils apparaissent. – InternetAussie

+1

Les zéros finaux n'affectent pas le nombre, alors pourquoi les supprimer? '1. == 1.0 == 1.00 == 1.000 == ... '. – NathanOliver

+0

Quel est le cas d'utilisation ici? – CinCout

Répondre

2

Les types double contiennent des valeurs, pas des représentations. 100, 100.0, et one hundred et 10x10 sont toutes des représentations différentes pour la même valeur. Donc, ce que vous essayez de faire est une erreur de catégorie qui n'a aucun sens.

Il est comme demander à quelqu'un qui a dix voitures s'il peut avoir dix voitures dans la base 16.

// Now When I try to convert cPrice back to double, it adds extra zeros i.e. 100.250000 

Montrez comment vous avez déterminé cela. Parce que c'est impossible. La valeur serait de cent un quart. Vous pouvez représenter ce que vous voulez pour vos propres besoins.

Lorsque vous faites int i = 2; est la valeur en i en base dix? Ou est-ce binaire? Ou est-ce en chiffres romains? Ce n'est pas une de ces choses. C'est le numéro deux. Le nombre de mains que vous avez.

+0

n'est pas 'double x = 1;' et 'int y = 1;' deux représentations différentes de la même valeur? – user463035818

+0

hm Je pense que ma déclaration n'est pas en contradiction avec ce que vous avez écrit: "Types comme des valeurs doubles, pas des représentations" ... et dans mon cas 'x' et' y' sont deux représentations différentes, mais je ne peux pas tenir x une représentation différente de la même valeur, juste une valeur différente représentée de la même manière (c'est-à-dire comme «double»). Je ne sais pas si cela a un sens .... – user463035818

+0

mal sur la substance. 'Les types comme les valeurs de double attente, pas les représentations 'est tout simplement faux. Ils tiennent certainement la représentation des valeurs. – SergeyA