diff --git a/src/Base/QuantityPy.xml b/src/Base/QuantityPy.xml index 41dbb62879..b23c9c049c 100644 --- a/src/Base/QuantityPy.xml +++ b/src/Base/QuantityPy.xml @@ -66,5 +66,11 @@ Quantity(string) -- arbitrary mixture of numbers and chars defining a Quantity + + + Format of the Quantity + + + diff --git a/src/Base/QuantityPyImp.cpp b/src/Base/QuantityPyImp.cpp index 310ac007d9..3f28b3c7cf 100644 --- a/src/Base/QuantityPyImp.cpp +++ b/src/Base/QuantityPyImp.cpp @@ -606,6 +606,44 @@ Py::String QuantityPy::getUserString(void) const return Py::String(getQuantityPtr()->getUserString().toUtf8(),"utf-8"); } +Py::Tuple QuantityPy::getFormat(void) const +{ + QuantityFormat fmt = getQuantityPtr()->getFormat(); + + Py::Tuple tuple(2); + tuple.setItem(0, Py::Int (fmt.precision)); + tuple.setItem(1, Py::Char(fmt.toFormat())); + return tuple; +} + +void QuantityPy::setFormat(Py::Tuple arg) +{ + QuantityFormat fmt; + + Py::Int prec(arg.getItem(0)); + Py::Char form(arg.getItem(1)); + fmt.precision = static_cast(prec); + + std::string fmtstr = static_cast(form); + if (fmtstr.size() != 1) + throw Py::ValueError("Invalid format character"); + switch (fmtstr.front()) { + case 'f': + fmt.format = QuantityFormat::Fixed; + break; + case 'e': + fmt.format = QuantityFormat::Scientific; + break; + case 'g': + fmt.format = QuantityFormat::Default; + break; + default: + throw Py::ValueError("Invalid format character"); + } + + getQuantityPtr()->setFormat(fmt); +} + PyObject *QuantityPy::getCustomAttributes(const char* /*attr*/) const { return 0;