.NET 使用十进制数 (Decimals) 实现的有理数 (分数) 值类型,用 C# 编写






2.28/5 (6投票s)
实现了一个有理数数据类型。
引言
本文中介绍的类实现了一个带有基本数学功能的有理数值类型。
使用代码
该类没有公共构造函数。
支持从 Int64
(因此也支持其他整数类型)和十进制数(因此也支持 float
和 double
)的隐式转换。
// Cast from int
PIEBALD.Types.Rational a = 1 ;
// Cast from double (via decimal)
PIEBALD.Types.Rational b = 2.3 ;
// Cast from decimal
PIEBALD.Types.Rational c = 4.5M ;
可以通过 ConversionMethod
static
属性控制从十进制数进行的转换。目前,DecimalConversionMethod
枚举定义了两个值:Decimal
和 BestGuess
。Decimal
简单地使用 10 的幂作为分母。BestGuess
尝试(并取得一定成功)确定哪些数字可以相除以产生该值。
// This is the default
PIEBALD.Types.Rational.ConversionMethod =
DecimalConversionMethod.Decimal;
// Yields 33333333333333333333
// 33333333/10000000000000000000000000000
PIEBALD.Types.Rational d = 1M / 3M ;
PIEBALD.Types.Rational.ConversionMethod =
DecimalConversionMethod.BestGuess;
// Yields 1/3
PIEBALD.Types.Rational e = 1M / 3M ;
可以使用 ParseInfix
和 ParseRpn
方法分配包含表达式的字符串。
// Convert from string
PIEBALD.Types.Rational f =
PIEBALD.Types.Rational.ParseInfix ( "1/2" ) ;
// Convert from string
PIEBALD.Types.Rational g =
PIEBALD.Types.Rational.ParseInfix ( "(1/2) / (3/4)" ) ;
// Convert from string
PIEBALD.Types.Rational h =
PIEBALD.Types.Rational.ParseRpn ( "1 2 /" ) ;
有关中缀表达式转换为后缀表达式的信息,请参阅我的 PIEBALD.Lib.LibRpn
类。
支持数学运算符(+、-、*、/、%、^(指数运算))。还有其他的静态和实例属性。
历史
- 首次发布 - 2006/01/16。