我需要将一些双精度值四舍五入到最大四位小数,然后使用这个库通过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.