取整并通过 XML-RPC 发送

Round a double and send it over XML-RPC

我需要将一些双精度值四舍五入到最多四位小数,然后将它们发送到 XML-RPC using this library

到目前为止我所做的如下:

首先我有一个圆形函数:

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

根据 this,它工作正常。

在我的应用程序中,我有一个设置方法 setXValue,它采用一个双精度和一个 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++ playground 中测试过)那么问题出在哪里?

我不能像这样将值存储在 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.