舍入一个double并通过XML-RPC发送它

时间:2016-04-12 15:13:28

标签: c++ floating-point decimal xml-rpc

我需要将一些双倍值舍入到最多四位小数,然后使用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数据类型,这是不正确的。

1 个答案:

答案 0 :(得分:1)

尝试使用XmlRpcValue的这个成员函数:

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