J'ai besoin d'arrondir des valeurs doubles à quatre décimales maximum, puis de les envoyer à l'adresse suivante XML-RPC en utilisant cette bibliothèque .
Ce que j'ai fait jusqu'à présent est le suivant :
Tout d'abord, j'ai une fonction ronde :
double roundD(double x, unsigned int precision = 4)
{
return round(x * pow(10.0, double(precision))) / pow(10.0, double(precision));
}
et cela fonctionne bien, selon este .
Dans mon application, j'ai une méthode setXValue qui prend un double et une méthode toXmlRpc() pour sortir un objet XmlRpcValue :
class Point{
public:
Point(double x, double y) {m_x = x; m_y=y;}
void Point::setXValue(double x)
{
m_x = roundD(x);
}
XmlRpcValue Point::toXmlRpc() const
{
XmlRpcValue xmlrpcvalue;
xmlrpcvalue["x"] = m_x;
return xmlrpcvalue;
}
private:
double m_x;
double m_y;
Ce que je stocke dans la valeur XML-RPC n'est pas un double arrondi. En fait, lorsque je reçois cette réponse XML-RPC, je vois de bonnes valeurs comme 0,3488, 0,1154 par exemple, mais aussi des valeurs de la forme 9,059900000000001 ou 8,9903999999999.
Je suis sûr que ma fonction roundD fonctionne bien (je l'ai testée dans le terrain de jeu C++), alors où se situe le problème ?
Je ne peux pas stocker la valeur dans l'objet XmlRpcValue comme ceci :
char str[80];
sprintf(str, "%.4f", m_x);
xmlrpcvalue["x"] = str;
Sinon, je changerais le type de données xml-rpc, et ce n'est pas correct.