perl - 怎么降级大佬?

标签 perl bignum

perl -Mbigrat -E'for (1..100) { $i += 1/3; say int($i), "\t", sprintf "%.55f", $i }'

垃圾邮件很多警告:

Argument "100/3" isn't numeric in addition (+) at …/site_perl/5.24.1/Math/BigRat.pm line 1939.

不带-Mbigrat再次运行,看看sprintf的预期效果。

如何降级Math::BigRat$i 实例转换为普通 NVsprintf 满意吗?

版本:

  • bigrat 0.47
  • 数学::BigRat 0.2612

最佳答案

我期望 Math::BigRat 提供一种获取普通数字的方法,它确实做到了:

  • as_int 用于整数
  • as_float 用于 float

出于调试目的,我插入了 $_ 的打印。

$i->as_int()int($i) 的作用相同:

$ perl -Mbigrat -E'for (1..100) { $i += 1/3; say $_, "\t", int($i), "\t", sprintf "%.55f", $i->as_int() }'
...
99      33      33.0000000000000000000000000000000000000000000000000000000
100     33      33.0000000000000000000000000000000000000000000000000000000

$i->as_float() 乍一看似乎按预期工作,但我不明白输出。所有小数位均为零,并且每隔一行 $i 等于 $_:

$ perl -Mbigrat -E'for (1..100) { $i += 1/3; say $_, "\t", int($i), "\t", sprintf "%.55f", $i->as_float() }'
...
90      30      30.0000000000000000000000000000000000000000000000000000000
91      30      91.0000000000000000000000000000000000000000000000000000000
92      30      92.0000000000000000000000000000000000000000000000000000000
93      31      31.0000000000000000000000000000000000000000000000000000000
94      31      94.0000000000000000000000000000000000000000000000000000000
95      31      95.0000000000000000000000000000000000000000000000000000000
96      32      32.0000000000000000000000000000000000000000000000000000000
97      32      97.0000000000000000000000000000000000000000000000000000000
98      32      98.0000000000000000000000000000000000000000000000000000000
99      33      33.0000000000000000000000000000000000000000000000000000000
100     33      100.0000000000000000000000000000000000000000000000000000000

这是带有 Math::BigRat 0.2614 的 Perl 5.30.0。

因此警告已修复,但此解决方案似乎有问题。

更新:按照评论中的要求,不带sprintf:

$ perl -Mbigrat -E'for (1..100) { $i += 1/3; say $_, "\t", int($i), "\t", $i->as_float() }'
...
90      30      30
91      30      91
92      30      92
93      31      31
94      31      94
95      31      95
96      32      32
97      32      97
98      32      98
99      33      33
100     33      100

关于perl - 怎么降级大佬?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44211409/

相关文章:

c - 将 BigNum 与普通整数相乘

ruby-on-rails - rails : Storing a 256 bit checksum as binary in database

mysql - 如何在 perl 中为查询引用字符串?

perl perlpacktut 对我来说没有意义

perl - 为什么 Moose 的构建器采用字符串值?

c++ - 计算一个数的大幂

perl - Moose 类的依赖注入(inject)

perl - 如何将 local::lib 与 fish shell 一起使用?

perl - 检查 Perl 模块中无穷大的最佳方法是什么?

delphi - Pascal (Delphi) 中的大数