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不支持。
那么有解决方法来解决这个问题吗?
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,我认为这值得提出一个问题