double値を四捨五入してXML-RPCをthis 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データ型を変更するだろうし、それは正しくありません。
ああ、私はそれを見たことがありません。私はこのように呼び出す必要があります:setDoubleFormat( "%。4f")、正しい? – ABCplus
はい、フォーマットはsprintfと同じです:http://www.cplusplus.com/reference/cstdio/snprintf/ドキュメントの使用方法をチェックしてください:http://www.oversim.org/chrome/site/doc /doxy/classXmlRpc_1_1XmlRpcValue.html#ade0d89d285db29286e1f4c336ded5cb4 – Rama
この変更を実装するので、 'setXValue'関数で' roundD'を呼び出すことはまだ有効か全く役に立たないと思いますか? – ABCplus