2 votes

Arrondir un double et l'envoyer via XML-RPC

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.

1voto

Rama Points 2869

Essayez d'utiliser cette fonction membre de XmlRpcValue :

setDoubleFormat (const char *f)
//Specify the format used to write double values.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X