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



我需要将一些双精度值四舍五入到最大四位小数,然后使用这个库通过XML-RPC发送它们。

到目前为止,我所做的是:

首先我有一个圆形函数:

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

根据这一点,它运行良好。

在我的应用程序中,我有一个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数据类型,这是不正确的。

尝试使用XmlRpcValue:的此成员函数

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

最新更新