Ich muss einige doppelte Werte auf vier Dezimalstellen runden und dann über XML-RPC mit this library senden.Runden Sie ein Doppel und senden Sie es über XML-RPC
Was ich bisher getan habe ist folgendes:
Zunächst einmal habe ich eine Runde Funktion:
double roundD(double x, unsigned int precision = 4)
{
return round(x * pow(10.0, double(precision)))/pow(10.0, double(precision));
}
und es funktioniert gut, nach this.
In meiner Anwendung habe ich eine Set-Methode setXValue, die einen Doppel- und ein toXmlRpc() -Methode zur Ausgabe einer XmlRpcValue Aufgabe übernimmt:
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;
Was ich speichere in dem XML-RPC Wert wird keine abgerundetes Doppel. In der Tat, wenn ich diese XML-RPC-Antwort erhalte, sehe ich gute Werte wie 0.3488, 0.1154 zum Beispiel, aber auch Werte in Form von 9.059900000000001 oder 8.990399999999999.
Ich bin sicher, meine RoundD-Funktion funktioniert gut (ich habe es in C++ Spielplatz getestet) also wo das Problem liegt?
ich den Wert in dem XmlRpcValue Objekt wie diese nicht speichern kann:
char str[80];
sprintf(str, "%.4f", m_x);
xmlrpcvalue["x"] = str;
Ansonsten würde ich den XML-RPC-Datentyp ändern, und das ist nicht richtig.
Ah, interessant, ich habe noch nie gesehen. Ich nehme an, ich sollte es so aufrufen: setDoubleFormat ("%. 4f"), richtig? – ABCplus
Ja, das Format ist dasselbe wie sprintf: http://www.cplusplus.com/reference/cstdio/snprintf/ Sehen Sie sich die Verwendung in der Dokumentation an: http://www.oversim.org/chrome/site/doc /doxy/classXmlRpc_1_1XmlRpcValue.html#ade0d89d285db29286e1f4c336ded5cb4 – Rama
Da ich diese Änderung jetzt implementieren werde, denken Sie, dass der Aufruf von 'roundD' in der' setXValue' Funktion immer noch gültig oder völlig unbrauchbar ist? – ABCplus