2016-04-12 12 views
2

double値を四捨五入してXML-RPCthis libraryに送信する必要があります。doubleを丸めてXML-RPCで送信

私がこれまでにやったことは以下の通りです:

まず第一に、私はラウンドの機能があります。

double roundD(double x, unsigned int precision = 4) 
{ 
    return round(x * pow(10.0, double(precision)))/pow(10.0, double(precision)); 
} 

をし、それがthisによると、正常に動作します。私は、XML-RPCの値に格納何

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; 

がされていません。私のアプリケーションで

、私はXmlRpcValueオブジェクトダブルを出力するtoXmlRpc()メソッドを取るsetメソッドのsetXValueをしました丸みを帯びたダブル。実際には、XML-RPCの回答を受け取ったとき、私は0.3488,0.1154のような良い値を見ていますが、9.059900000000001または8.990399999999999という形式の値もあります。

問題がどこにあるので、私のroundD関数がうまく動作する(C++プレイグラウンドでテストしました)のでしょうか?

私はこのようなXmlRpcValueオブジェクトに値を格納することはできません。

char str[80]; 
sprintf(str, "%.4f", m_x); 
xmlrpcvalue["x"] = str; 

そうでなければ、私は、XML-RPCデータ型を変更するだろうし、それは正しくありません。

答えて

1

はXmlRpcValueのこのメンバ関数を使用してみてください:面白い

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

ああ、私はそれを見たことがありません。私はこのように呼び出す必要があります:setDoubleFormat( "%。4f")、正しい? – ABCplus

+0

はい、フォーマットはsprintfと同じです:http://www.cplusplus.com/reference/cstdio/snprintf/ドキュメントの使用方法をチェックしてください:http://www.oversim.org/chrome/site/doc /doxy/classXmlRpc_1_1XmlRpcValue.html#ade0d89d285db29286e1f4c336ded5cb4 – Rama

+0

この変更を実装するので、 'setXValue'関数で' roundD'を呼び出すことはまだ有効か全く役に立たないと思いますか? – ABCplus

関連する問題