Introduction
The class presented in this article implements a rational value type with basic mathematical functionality.
Using the code
This class has no public constructors.
Implicit casting to/from Int64
(and therefore other integer types) and decimal (and therefore float
and double
) is supported.
PIEBALD.Types.Rational a = 1 ;
PIEBALD.Types.Rational b = 2.3 ;
PIEBALD.Types.Rational c = 4.5M ;
Conversion from decimal can be controlled by the ConversionMethod
static
property. Currently, the DecimalConversionMethod
enumeration defines two values: Decimal
and BestGuess
. Decimal
simply uses a power of ten as the denominator. BestGuess
tries (with some success) to determine what numbers can be divided to produce the value.
PIEBALD.Types.Rational.ConversionMethod =
DecimalConversionMethod.Decimal;
PIEBALD.Types.Rational d = 1M / 3M ;
PIEBALD.Types.Rational.ConversionMethod =
DecimalConversionMethod.BestGuess;
PIEBALD.Types.Rational e = 1M / 3M ;
Strings containing expressions can be assigned with the ParseInfix
and ParseRpn
methods.
PIEBALD.Types.Rational f =
PIEBALD.Types.Rational.ParseInfix ( "1/2" ) ;
PIEBALD.Types.Rational g =
PIEBALD.Types.Rational.ParseInfix ( "(1/2) / (3/4)" ) ;
PIEBALD.Types.Rational h =
PIEBALD.Types.Rational.ParseRpn ( "1 2 /" ) ;
See my PIEBALD.Lib.LibRpn
class for information on how infix is transformed to RPN.
The mathematical operators (+, -, *, /, %, ^ (exponentiation)) are supported. There are other static and instance properties as well.
History
- First posted - 2006/01/16.