[::NuT, ::DeT] does Real
Rational
是存储为分子和分母对的数字的通用角色。它由分子 (NuT
) 和分母 (DeT
) 的类型进行参数化。默认情况下,这些是 Int
,但通过使用不同的参数化,可以实现其他类型的 Rational
。此外,Rational
对象在其整个生命周期中都是不可变的。
does Rational[UInt] ;my Positive = Positive.new(1,3);say ; # OUTPUT: «0.333333»my Positive =Positive.new(-2,3); # OUTPUT: «Type check failed in binding to parameter 'nu'; expected UInt but got Int (-2)»
请注意,由于 DeT
默认等于 NuT
,因此在这种情况下,两者都实例化为 UInt
。Raku 中内置了 Rat
和 FatRat
,它们都扮演 Rational
角色。
方法§
方法 new§
method new(NuT , DeT --> Rational)
从分子和分母创建一个新的有理数对象,它将其标准化为最低项。$denominator
可以为零,在这种情况下,分子将标准化为 -1
、0
或 1
,具体取决于原值分别是负数、零还是正数。
方法 Bool§
multi method Bool(Rational: --> Bool)
如果 numerator 为 0
,则返回 False
,否则返回 True
。这适用于 <0/0>
零分母 <Rational
,尽管 ?<0/0>.Num
为 True
。
方法 Bridge§
method Bridge()
返回转换为 Num
的数字。
方法 Int§
method Int(Rational: --> Int)
通过截断表示的数字的非整数部分(如果有的话),将调用者强制转换为 Int
。如果 denominator 为零,则会 失败,并显示 X::Numeric::DivideByZero
。
方法 Num§
method Num(Rational: --> Num)
通过将 numerator 除以 denominator,将调用者强制转换为 Num
。如果 denominator 为 0
,则返回 Inf
、-Inf
或 NaN
,具体取决于 numerator 是正数、负数还是 0
。
方法 ceiling§
method ceiling(Rational: --> Int)
返回不小于调用者的最小整数。如果 denominator 为零,则 失败,并显示 X::Numeric::DivideByZero
。
方法 floor§
method floor(Rational: --> Int)
返回不大于调用者的最大整数。如果分母为零,则失败,并显示X::Numeric::DivideByZero
。
方法 isNaN§
method isNaN(Rational: --> Bool)
测试调用者的 Num 值是否为 NaN,NaN 是“不可用数字”的首字母缩写。即其分子和分母都为零。
方法 numerator§
method numerator(Rational: --> NuT)
返回分子。
方法 denominator§
method denominator(Rational: --> DeT)
返回分母。
方法 nude§
method nude(Rational: --> Positional)
返回分子和分母的列表。
方法 norm§
method norm(Rational: --> Rational)
自 6.d 起已弃用。不再需要此方法,因为自 6.d 语言版本起,创建时需要对Rational
类型进行规范化。
返回规范化的 Rational 对象,即具有正分母,分子和分母互质。分母也可以为零,但在任何操作或转换为字符串时,都会导致异常。
use v6.c;my Rational = 3/0;say .norm.raku; # OUTPUT: «<1/0>»
say ; # OUTPUT: «Attempt to divide by zero when coercing Rational to Str
方法 base-repeating§
method base-repeating(Rational: Int() = 10)
返回两个字符串的列表,连接后表示以基数$base
表示的数字。第二个元素是重复的元素。例如
my (, ) = (19/3).base-repeating(10);say ; # OUTPUT: «6.»say ; # OUTPUT: «3»printf '%s(%s)', , ; # OUTPUT: «6.(3)»
19/3 是 6.333333...,其中 3 无限重复。
如果没有重复,则第二个字符串为空
say (5/2).base-repeating(10).raku; # OUTPUT: «("2.5", "")»
确定重复组的精度限制为 1000 个字符,超过该限制,第二个字符串为???
。
$base
默认为10
。
方法 Range§
返回表示支持的值范围的Range 对象。