libUTL++
|
Fixed-point decimal number. More...
#include <Decimal.h>
Public Member Functions | |
Decimal (int64_t n) | |
Constructor. More... | |
Decimal (const String &str) | |
Constructor. More... | |
virtual void | copy (const Object &rhs) |
Copy another instance. More... | |
virtual int | compare (const Object &rhs) const |
Compare with another object. More... | |
virtual void | serialize (Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize to or from a stream. More... | |
virtual String | toString () const |
Return a string representation of self. More... | |
String | toString (uint_t digits, bool round=true) const |
Convert to string representation. More... | |
Decimal & | set (const String &str) |
Set from string representation. More... | |
Decimal & | abs () |
Take the absolute value. More... | |
Decimal & | floor () |
Remove any fractional component. More... | |
Math Operators | |
Decimal | operator+ (const Decimal &rhs) const |
Decimal & | operator+= (const Decimal &rhs) |
Decimal | operator- (const Decimal &rhs) const |
Decimal & | operator-= (const Decimal &rhs) |
Decimal | operator* (const Decimal &rhs) const |
Decimal & | operator*= (const Decimal &rhs) |
Decimal | operator/ (const Decimal &rhs) const |
Decimal & | operator/= (const Decimal &rhs) |
Decimal | operator% (const Decimal &rhs) const |
Decimal & | operator++ () |
Decimal | operator++ (int) |
Decimal & | operator-- () |
Decimal | operator-- (int) |
Public Member Functions inherited from utl::Object | |
void | clear () |
Revert to initial state. More... | |
virtual void | vclone (const Object &rhs) |
Make an exact copy of another instance. More... | |
virtual void | steal (Object &rhs) |
"Steal" the internal representation from another instance. More... | |
virtual void | dump (Stream &os, uint_t level=uint_t_max) const |
Dump a human-readable representation of self to the given output stream. More... | |
void | dumpWithClassName (Stream &os, uint_t indent=4, uint_t level=uint_t_max) const |
Front-end for dump() that prints the object's class name. More... | |
virtual const Object & | getKey () const |
Get the key for this object. More... | |
bool | hasKey () const |
Determine whether or not the object has a key. More... | |
virtual const Object & | getProxiedObject () const |
Get the proxied object (= self if none). More... | |
virtual Object & | getProxiedObject () |
Get the proxied object (= self if none). More... | |
virtual size_t | hash (size_t size) const |
Get the hash code for the object. More... | |
bool | _isA (const RunTimeClass *runTimeClass) const |
Determine whether self's class is a descendent of the given class. More... | |
operator String () const | |
Conversion to String. More... | |
size_t | allocatedSize () const |
Get the total allocated size of this object. More... | |
virtual size_t | innerAllocatedSize () const |
Get the "inner" allocated size. More... | |
virtual void | addOwnedIt (const class FwdIt *it) const |
Notify self that it owns the given iterator. More... | |
virtual void | removeOwnedIt (const class FwdIt *it) const |
Notify self that the given owned iterator has been destroyed. More... | |
bool | operator< (const Object &rhs) const |
Less-than operator. More... | |
bool | operator<= (const Object &rhs) const |
Less-than-or-equal-to operator. More... | |
bool | operator> (const Object &rhs) const |
Greater-than operator. More... | |
bool | operator>= (const Object &rhs) const |
Greater-than-or-equal-to operator. More... | |
bool | operator== (const Object &rhs) const |
Equal-to operator. More... | |
bool | operator!= (const Object &rhs) const |
Unequal-to operator. More... | |
void | serializeIn (Stream &is, uint_t mode=ser_default) |
Serialize from an input stream. More... | |
void | serializeOut (Stream &os, uint_t mode=ser_default) const |
Serialize to an output stream. More... | |
void | serializeOutBoxed (Stream &os, uint_t mode=ser_default) const |
Serialize a boxed object to an output stream. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from utl::Object | |
static Object * | serializeInNullable (Stream &is, uint_t mode=ser_default) |
Serialize a nullptr-able object from an input stream. More... | |
static void | serializeOutNullable (const Object *object, Stream &os, uint_t mode=ser_default) |
Serialize a nullptr-able object to an output stream. More... | |
static void | serializeNullable (Object *&object, Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize a nullptr-able object to or from a stream. More... | |
static Object * | serializeInBoxed (Stream &is, uint_t mode=ser_default) |
Serialize a boxed object from an input stream. More... | |
static void | serializeBoxed (Object *&object, Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize a boxed object to or from a stream. More... | |
Fixed-point decimal number.
This simple implementation uses a signed 64-bit integer as the raw encoding, and provides 6 decimal digits of precision. That is, the fractional part of the decimal number may be precisely expressed as a whole number of one-millionths.
Noting that:
We get:
Addition and subtraction are simple: just add or subtract the "raw" underlying integers, and the result of that is the correct decimal answer.
Multiplication and division are very simple too, but they do need a simple shift adjustment to restore correct scaling factor, as well as a rounding adjustment to minimize loss of precision when extra digits in the result of a calculation are discarded. For example, 2/3 will be calculated as 0.666667 (and not 0.666666).
Note that if you call toString() with digits < 6, the printed number may be rounded up to show the closest approximation to the actual stored number in the specified number of digits:
If you don't want this behavior, specify round=false when calling toString().
|
inline |
|
inline |
Constructor.
str | string representation of initial value |
Definition at line 75 of file Decimal.h.
References utl::compare(), utl::copy(), utl::ser_default, utl::serialize(), and utl::toString().
|
virtual |
Copy another instance.
When you override copy(), you should usually call the superclass's copy().
rhs | object to copy |
Reimplemented from utl::Object.
|
virtual |
Compare with another object.
If no overridden version succeeds in doing the comparison, then an attempt will be made to re-start the comparison process using one or both of the objects' keys. Usually, an override of compare() should call the superclass's compare() if it doesn't know how to compare itself with the rhs object.
rhs | object to compare with |
Reimplemented from utl::Object.
|
virtual |
Serialize to or from a stream.
This is the only virtual method for serialization. You must override this in any class that has data to be serialized, and ensure that the superclass's serialize() gets called.
stream | stream to serialize from/to |
io | see utl::io_t |
mode | see utl::serialize_t |
Reimplemented from utl::Object.
|
virtual |
Return a string representation of self.
Reimplemented from utl::Object.
Convert to string representation.
digits | number of digits of precision |
round | (optional : true) round up to show best approximation (if digits < 6)? |
|
inline |
|
inline |
Remove any fractional component.
Definition at line 108 of file Decimal.h.
References utl::deInit(), and utl::init().