From 41971bc0a396c5e676b3833e11eeafde5e8b0046 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 23 Nov 1996 08:30:55 +0000 Subject: [PATCH] Aggiunto metodo floor git-svn-id: svn://10.65.10.50/trunk@3922 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/real.cpp | 41 ++++++++++++++++++++++++++++++++++++++++- include/real.h | 4 ++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/include/real.cpp b/include/real.cpp index 02847c7ef..09ef5c0ab 100755 --- a/include/real.cpp +++ b/include/real.cpp @@ -214,6 +214,21 @@ real& real::ceil (int prec) return *this; } +real& real::floor (int prec) +{ + long double p = 1.0; + if (prec != 0) + { + p = ipow10(prec); + _dec *= p; + } + _dec = floorl(_dec); + if (prec != 0) + _dec /= p; + + return *this; +} + real& real::trunc(int prec) { long double p = 1.0; @@ -568,7 +583,7 @@ real & real ::ceil (int prec) DEC integer; dint (&integer, ptr ()); // Extract the integer part - + if (disgt (ptr (), &integer)) // If positive ... addid (ptr (), &integer, 1); // ... add 1 else @@ -581,6 +596,30 @@ real & real ::ceil (int prec) return *this; } +real & real ::floor (int prec) +{ + double p = 1.0; + if (prec != 0) + { + p = ::pow (10.0, -prec); + divdfd (ptr (), ptr (), p); + } + + DEC integer; + dint (&integer, ptr ()); // Extract the integer part + + if (dislt (ptr (), &integer)) // If negative ... + addid (ptr (), &integer, -1); // ... subtract 1 + else + dcpy(ptr(), &integer); // If positive + + if (prec != 0) + muldfd (ptr (), ptr (), p); + + trail(); + return *this; +} + real & real ::trunc (int prec) { dtrunc (ptr (), ptr (), prec); diff --git a/include/real.h b/include/real.h index b1e3c6b69..ef3ef4660 100755 --- a/include/real.h +++ b/include/real.h @@ -74,6 +74,8 @@ public: real& trunc(int prec = 0) ; // @cmember Arrotonda al numero successivo (della precisione passata) real& ceil(int prec = 0); + // @cmember Arrotonda al numero precedente (della precisione passata) + real& floor(int prec = 0); // @cmember Assegna un reale real& operator = (const real& a); // @cmember Assegna un reale @@ -207,6 +209,8 @@ public: real& trunc(int prec = 0) ; // @cmember Arrotonda al numero successivo (della precisione passata) real& ceil(int prec = 0); + // @cmember Arrotonda al numero precedente (della precisione passata) + real& floor(int prec = 0); // @cmember Assegna un reale real& operator =(double a); // @cmember Assegna un reale (passato per indirizzo)