## 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.

BSCS 1992 Wentworth Institute of Technology

Originally from the Boston (MA) area. Lived in SoCal for a while. Now in the Phoenix (AZ) area.

OpenVMS enthusiast, ISO 8601 evangelist, photographer, opinionated SOB, acknowledged pedant and contrarian

---------------

"Using fewer technologies is better than using more." -- Rico Mariani

"Good code is its own best documentation. As you’re about to add a comment, ask yourself, ‘How can I improve the code so that this comment isn’t needed?’" -- Steve McConnell

"Every time you write a comment, you should grimace and feel the failure of your ability of expression." -- Unknown

"If you need help knowing what to think, let me know and I'll tell you." -- Jeffrey Snover [MSFT]

"Typing is no substitute for thinking." -- R.W. Hamming

"I find it appalling that you can become a programmer with less training than it takes to become a plumber." -- Bjarne Stroustrup

ZagNut’s Law: Arrogance is inversely proportional to ability.

"Well blow me sideways with a plastic marionette. I've just learned something new - and if I could award you a 100 for that post I would. Way to go you keyboard lovegod you." -- Pete O'Hanlon

"linq'ish" sounds like "inept" in German -- Andreas Gieriet

"Things would be different if I ran the zoo." -- Dr. Seuss

"Wrong is evil, and it must be defeated." –- Jeff Ello

"A good designer must rely on experience, on precise, logical thinking, and on pedantic exactness." -- Nigel Shaw

“It’s always easier to do it the hard way.” -- Blackhart

“If Unix wasn’t so bad that you can’t give it away, Bill Gates would never have succeeded in selling Windows.” -- Blackhart

"Omit needless local variables." -- Strunk... had he taught programming