Raku 格式

Sum*_*nal 8 printf rakudo raku

我编写了一个输出 a 的函数double,最多 25 位小数。我正在尝试将其打印为 Raku 的格式化输出。

但是,输出不正确且被截断。

参见 MWE:

my $var = 0.8144262510988963255087469;
say sprintf("The variable value is: %.25f", $var) 
Run Code Online (Sandbox Code Playgroud)

上面的代码给出的The variable value is: 0.8144262510988963000000000结果不是预期的结果。

另外,这看起来很奇怪:


my $var = 0.8144262510988963255087469;

say $var.Str.chars; # 29 wrong, expected 27

Run Code Online (Sandbox Code Playgroud)

我在以下位置测试了相同的内容C

#include <stdio.h>

int main() {
   double var = 0.8144262510988963255087469;
   printf("The variable value is: %.25lf \n", var);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,它工作得很好。sprintf鉴于和的相同性质printf,我希望这个C示例也能在 Raku 中运行。好像%lf支持

那么有解决方法来解决这个问题吗?

Eli*_*sen 6

Rat我认为这实际上是文字创建方式的一个错误。或者至少是WAT:-)。

我实际上有点期望0.8144262510988963255087469给出编译时警告,或者创建 a Num,因为它超出了 a 的标准精度Rat

raku -e 'say 0.8144262510988963255087469'
0.814426251098896400086204416
Run Code Online (Sandbox Code Playgroud)

请注意,这些并不相同。

幸运的是,有一个简单的解决方法,通过创建FatRat

$ raku -e 'say 0.8144262510988963255087469.FatRat'
0.8144262510988963255087469
Run Code Online (Sandbox Code Playgroud)

FWIW,我认为这值得提出一个问题