role Rational[::NuT, ::DeTdoes Real { ... }

Rational 是存储为分子和分母对的数字的通用角色。它由分子 (NuT) 和分母 (DeT) 的类型进行参数化。默认情况下,这些是 Int,但通过使用不同的参数化,可以实现其他类型的 Rational。此外,Rational 对象在其整个生命周期中都是不可变的。

class Positive does Rational[UInt{};
my Positive $one-third = Positive.new(1,3);
say $one-third;                         # OUTPUT: «0.333333␤» 
my Positive $fail =Positive.new(-2,3);  # OUTPUT: «Type check failed in binding to parameter 'nu'; expected UInt but got Int (-2)␤»

请注意,由于 DeT 默认等于 NuT,因此在这种情况下,两者都实例化为 UInt。Raku 中内置了 RatFatRat,它们都扮演 Rational 角色。

方法§

方法 new§

method new(NuT:D $numeratorDeT:D $denominator --> Rational:D)

从分子和分母创建一个新的有理数对象,它将其标准化为最低项。$denominator 可以为零,在这种情况下,分子将标准化为 -101,具体取决于原值分别是负数、零还是正数。

方法 Bool§

multi method Bool(Rational:D: --> Bool:D)

如果 numerator0,则返回 False,否则返回 True。这适用于 <0/0> 零分母 <Rational,尽管 ?<0/0>.NumTrue

方法 Bridge§

method Bridge()

返回转换为 Num 的数字。

方法 Int§

method Int(Rational:D: --> Int:D)

通过截断表示的数字的非整数部分(如果有的话),将调用者强制转换为 Int。如果 denominator 为零,则会 失败,并显示 X::Numeric::DivideByZero

方法 Num§

method Num(Rational:D: --> Num:D)

通过将 numerator 除以 denominator,将调用者强制转换为 Num。如果 denominator0,则返回 Inf-InfNaN,具体取决于 numerator 是正数、负数还是 0

方法 ceiling§

method ceiling(Rational:D: --> Int:D)

返回不小于调用者的最小整数。如果 denominator 为零,则 失败,并显示 X::Numeric::DivideByZero

方法 floor§

method floor(Rational:D: --> Int:D)

返回不大于调用者的最大整数。如果分母为零,则失败,并显示X::Numeric::DivideByZero

方法 isNaN§

method isNaN(Rational:D: --> Bool:D)

测试调用者的 Num 值是否为 NaN,NaN 是“不可用数字”的首字母缩写。即其分子和分母都为零。

方法 numerator§

method numerator(Rational:D: --> NuT:D)

返回分子。

方法 denominator§

method denominator(Rational:D: --> DeT:D)

返回分母。

方法 nude§

method nude(Rational:D: --> Positional)

返回分子和分母的列表。

方法 norm§

method norm(Rational:D: --> Rational:D)

自 6.d 起已弃用。不再需要此方法,因为自 6.d 语言版本起,创建时需要对Rational类型进行规范化。

返回规范化的 Rational 对象,即具有正分母,分子和分母互质。分母也可以为零,但在任何操作或转换为字符串时,都会导致异常。

use v6.c;
my Rational $by-zero = 3/0;
say $by-zero.norm.raku# OUTPUT: «<1/0>␤» 
say $by-zero# OUTPUT: «Attempt to divide by zero when coercing Rational to Str␤ 

方法 base-repeating§

method base-repeating(Rational:D: Int:D() $base = 10)

返回两个字符串的列表,连接后表示以基数$base表示的数字。第二个元素是重复的元素。例如

my ($non-rep$repeating= (19/3).base-repeating(10);
say $non-rep;                               # OUTPUT: «6.␤» 
say $repeating;                             # OUTPUT: «3␤» 
printf '%s(%s)'$non-rep$repeating;      # OUTPUT: «6.(3)»

19/3 是 6.333333...,其中 3 无限重复。

如果没有重复,则第二个字符串为空

say (5/2).base-repeating(10).raku;          # OUTPUT: «("2.5", "")␤»

确定重复组的精度限制为 1000 个字符,超过该限制,第二个字符串为???

$base默认为10

方法 Range§

返回表示支持的值范围的Range 对象

类型图§

Rational的类型关系
raku-type-graph Rational Rational Real Real Rational->Real Numeric Numeric Real->Numeric Mu Mu Any Any Any->Mu Cool Cool Cool->Any FatRat FatRat FatRat->Rational FatRat->Cool Rat Rat Rat->Rational Rat->Cool Stringy Stringy Str Str Str->Cool Str->Stringy Allomorph Allomorph Allomorph->Str RatStr RatStr RatStr->Rat RatStr->Allomorph

展开上方的图表