我需要将一些双倍值舍入到最多四位小数,然后使用XML-RPC将它们发送到this library。
到目前为止我所做的是以下内容:
首先,我有一个圆函数:
double roundD(double x, unsigned int precision = 4)
{
return round(x * pow(10.0, double(precision))) / pow(10.0, double(precision));
}
根据{{3}},它可以正常工作。
在我的应用程序中,我有一个set方法setXValue,它使用double和toXmlRpc()方法输出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;
我在XML-RPC值中存储的内容不是舍入的双精度数。实际上,当收到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数据类型,这是不正确的。
答案 0 :(得分:1)
尝试使用XmlRpcValue的这个成员函数:
setDoubleFormat (const char *f)
//Specify the format used to write double values.