c++ - rationnel - python nombre de chiffre apres la virgule




Convertir float en chaîne avec la précision de l'ensemble et le nombre de chiffres décimaux? (3)

Ici, je fournis un exemple négatif où vous voulez éviter lors de la conversion de nombre flottant en chaînes.

float num=99.463;
float tmp1=round(num*1000);
float tmp2=tmp1/1000;
cout << tmp1 << " " << tmp2 << " " << to_string(tmp2) << endl;

Vous obtenez

99463 99.463 99.462997

Note: la variable num peut être n'importe quelle valeur proche de 99.463, vous obtiendrez la même impression. Le but est d'éviter la fonction c ++ 11 "to_string". Il m'a fallu du temps pour sortir ce piège. La meilleure façon est la méthode stringstream et sprintf (langage C). C ++ 11 ou plus récent devrait fournir un deuxième paramètre comme le nombre de chiffres après le virgule flottante à montrer. À l'heure actuelle, la valeur par défaut est 6. Je pose cette question afin que les autres ne seront pas temps à ce sujet.

J'ai écrit ma première version, s'il vous plaît laissez-moi savoir si vous trouvez un bug qui doit être corrigé. Vous pouvez contrôler le comportement exact avec l'iomanipulator. Ma fonction est d'afficher le nombre de chiffres après le point décimal.

string ftos(float f, int nd) {
   ostringstream ostr;
   int tens = stoi("1" + string(nd, '0'));
   ostr << round(f*tens)/tens;
   return ostr.str();
}

Comment convertir un float en une chaîne en C ++ en spécifiant la précision et le nombre de chiffres décimaux?

Par exemple: 3.14159265359 -> "3.14"


La méthode habituelle pour faire ce genre de chose est de "imprimer en chaîne". En C ++ cela signifie utiliser std::stringstream quelque chose comme:

std::stringstream ss;
ss << std::fixed << std::setprecision(2) << number;
std::string mystring = ss.str();

#include <iomanip> // setprecision
#include <sstream> // stringstream

double pi = 3.14159265359;
stringstream stream;
stream << fixed << setprecision(2) << pi;
string s = stream.str();

Voir fixed

Utiliser la notation à virgule flottante fixe

Définit l' floatfield format floatfield pour le flux str sur fixed .

Lorsque floatfield est défini sur fixed , les valeurs à virgule flottante sont écrites à l'aide de la notation à virgule fixe: la valeur est représentée avec autant de chiffres dans la partie décimale que spécifié par le champ precision ( precision ) et sans partie exposant.

et setprecision .





floating-point