Commit fc80fad9 authored by Josh Haberman's avatar Josh Haberman

Fix for https://github.com/google/protobuf/issues/758

Change-Id: I590b34b96c84a3ba6e094a0bd86f153147ade3d3
parent 26f0c678
...@@ -1776,22 +1776,25 @@ class PythonFieldValuePrinter : public TextFormat::FieldValuePrinter { ...@@ -1776,22 +1776,25 @@ class PythonFieldValuePrinter : public TextFormat::FieldValuePrinter {
// Python floats to ensure consistency. // Python floats to ensure consistency.
string PrintFloat(float value) const { return PrintDouble(value); } string PrintFloat(float value) const { return PrintDouble(value); }
string PrintDouble(double value) const { string PrintDouble(double value) const {
// Same as float.__str__() // This implementation is not highly optimized (it allocates two temporary
char* buf = PyOS_double_to_string( // Python objects) but it is simple and portable. If this is shown to be a
value, // performance bottleneck, we can optimize it, but the results will likely
#if PY_MAJOR_VERSION < 3 // be more complicated to accommodate the differing behavior of double
'g', PyFloat_STR_PRECISION, // Output is rounded to 12 digits. // formatting between Python 2 and Python 3.
#else //
'r', 0, // (Though a valid question is: do we really want to make out output
#endif // dependent on the Python version?)
Py_DTSF_ADD_DOT_0, // Trailing .0 is always printed. ScopedPyObjectPtr py_value(PyFloat_FromDouble(value));
NULL); if (!py_value.get()) {
if (!buf) {
return string(); return string();
} }
string result(buf);
PyMem_Free(buf); ScopedPyObjectPtr py_str(PyObject_Str(py_value.get()));
return result; if (!py_str.get()) {
return string();
}
return string(PyString_AsString(py_str.get()));
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment