C++: Quelle est la spécification de format printf()
pour float
? (Visual C++)C++: Quelle est la spécification du format printf() pour "float"?
J'avais l'habitude d'être que j'ai utilisé %g
pour float
et %lg
pour double
.
Il semble que la spécification a changé et float
est indéfini et double
est %g
.
J'ai des bits en mémoire que j'imprime donc le casting n'est pas une option.
Y at-il un moyen que je peux imprimer float
valeurs en utilisant printf()
?
Mise à jour:
Ce code a été écrit pour les tests unitaires C++ libs génériques utilisés sur un système embarqué. Voici ce que je devais faire pour que le float
fonctionne. Le code est en fonction du modèle:
template <typename T,typename TTYP,typename Ttyp,int bits,bool IsSigned>
Error testMatrixT()
{ ...
est ici un petit bout de code:
if (typeid(Ttyp) == typeid(float)) {
float64 c = *(float32*)&Tp(row,col);
float64 a1 = *(float32*)&Arg1(row,col);
float64 a2 = *(float32*)&Arg2(row,col);
float64 e = *(float32*)&Exp(row,col);
m_b = (c == e);
_snprintf(m_acDiag, sizeof(m_acDiag)-1
, "add(Arg1,Arg2): arg1=%g, arg2=%g, Expected=%g, Actual=%g, Result: %s"
, a1, a2, e, c, BOOL_PF(m_b));
} else {
...
assez laid est pas? L'utilisation de flottants comme arguments donne une mauvaise sortie. Peut-être en raison de l'utilisation de _snprintf()
? Il ya des années j'utiliserais %lg
et ce serait OK. Plus maintenant.
C'est la troisième ou quatrième question que j'ai vu, en autant de jours, à propos de l'impression d'un flotteur! – Praetorian
Vous n'avez pas mentionné ce qui se passe si vous utilisez% g. Mais% g n'est pas la valeur par défaut pour float de toute façon. – steve
@steve: '% g' fonctionne pour float, puisqu'il est promu en double. –