From 2e92e043da15cae5d73dae987317984c10091797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Thu, 22 Jun 2017 13:20:57 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@520 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- main.cpp | 7 +++++-- src_main/core/pistring.cpp | 18 ++++++++++++++++-- src_main/core/pistring.h | 16 ++++++++-------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/main.cpp b/main.cpp index d37706be..1acc5118 100644 --- a/main.cpp +++ b/main.cpp @@ -3,14 +3,17 @@ int main(int argc, char *argv[]) { - PIVector2D v(2, 2, PIVector() << PIVariant(1) << PIVariant(2) << PIVariant(3) << PIVariant(4)); + /*PIVector2D v(2, 2, PIVector() << PIVariant(1) << PIVariant(2) << PIVariant(3) << PIVariant(4)); piCout << v; PIByteArray ba; ba << v; piCout << ba.size(); PIVector2D v2; ba >> v2; - piCout << v2; + piCout << v2;*/ + double f = 10.0002; + PIString s = PIString::fromNumber(f, 'g', 6); + piCout << s; return 0; } diff --git a/src_main/core/pistring.cpp b/src_main/core/pistring.cpp index 32621a2a..d0fa78f2 100755 --- a/src_main/core/pistring.cpp +++ b/src_main/core/pistring.cpp @@ -93,8 +93,22 @@ PIString PIString::lltos(const llong num) {pisprintf("%lld", num); return PIStri PIString PIString::uitos(const uint num) {pisprintf("%u", num); return PIString(ch);} PIString PIString::ultos(const ulong num) {pisprintf("%lu", num); return PIString(ch);} PIString PIString::ulltos(const ullong num) {pisprintf("%llu", num); return PIString(ch);} -PIString PIString::ftos(const float num) {pisprintf("%.8f", num); return PIString(ch);} -PIString PIString::dtos(const double num) {pisprintf("%.8f", num); return PIString(ch);} +PIString PIString::ftos(const float num, char format, int precision) { + char f[16] = "%."; + int wr = sprintf(&(f[2]), "%d", precision); + f[2 + wr] = format; + f[3 + wr] = 0; + pisprintf(f, num); + return PIString(ch); +} +PIString PIString::dtos(const double num, char format, int precision) { + char f[16] = "%."; + int wr = sprintf(&(f[2]), "%d", precision); + f[2 + wr] = format; + f[3 + wr] = 0; + pisprintf(f, num); + return PIString(ch); +} #undef pisprintf diff --git a/src_main/core/pistring.h b/src_main/core/pistring.h index 3abeab29..80d8cccc 100755 --- a/src_main/core/pistring.h +++ b/src_main/core/pistring.h @@ -603,15 +603,15 @@ public: //! \brief Set string content to numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::setFloat - PIString & setNumber(const float value) {clear(); *this += PIString::fromNumber(value); return *this;} + PIString & setNumber(const float value, char format = 'f', int precision = 8) {clear(); *this += PIString::fromNumber(value, format, precision); return *this;} //! \brief Set string content to numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::setFloat - PIString & setNumber(const double & value) {clear(); *this += PIString::fromNumber(value); return *this;} + PIString & setNumber(const double & value, char format = 'f', int precision = 8) {clear(); *this += PIString::fromNumber(value, format, precision); return *this;} //! \brief Set string content to numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::setFloat - PIString & setNumber(const ldouble & value) {clear(); *this += PIString::fromNumber(value); return *this;} + PIString & setNumber(const ldouble & value, char format = 'f', int precision = 8) {clear(); *this += PIString::fromNumber(value, format, precision); return *this;} //! \brief Set string content to human readable size in B/kB/MB/GB/TB //! \details Example: \snippet pistring.cpp PIString::setReadableSize @@ -653,15 +653,15 @@ public: //! \brief Return string contains numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::fromFloat - static PIString fromNumber(const float value) {return ftos(value);} + static PIString fromNumber(const float value, char format = 'f', int precision = 8) {return ftos(value, format, precision);} //! \brief Return string contains numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::fromFloat - static PIString fromNumber(const double & value) {return ftos(value);} + static PIString fromNumber(const double & value, char format = 'f', int precision = 8) {return dtos(value, format, precision);} //! \brief Return string contains numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::fromFloat - static PIString fromNumber(const ldouble & value) {return ftos(value);} + static PIString fromNumber(const ldouble & value, char format = 'f', int precision = 8) {return dtos(value, format, precision);} //! \brief Return "true" or "false" static PIString fromBool(const bool value) {return PIString(value ? "true" : "false");} @@ -698,8 +698,8 @@ private: static PIString uitos(const uint num); static PIString ultos(const ulong num); static PIString ulltos(const ullong num); - static PIString ftos(const float num); - static PIString dtos(const double num); + static PIString ftos(const float num, char format = 'f', int precision = 8); + static PIString dtos(const double num, char format = 'f', int precision = 8); static PIString fromNumberBaseS(const llong value, int base = 10, bool * ok = 0); static PIString fromNumberBaseU(const ullong value, int base = 10, bool * ok = 0); static llong toNumberBase(const PIString & value, int base = -1, bool * ok = 0);