perl - 在 Perl 中使用 POSIX ceil() 出现意外结果

标签 perl floating-point posix ceil

我一生都无法弄清楚为什么下面会产生它的结果。

use POSIX;
my $g = 6.65;
my $t = $g * 4;
my $r = $t - $g;
my $n = $r / $g;
my $c = ceil($n);
print "$c ($n)\n";

印记味道不错,我知道——抱歉。

我已经为我的应用程序解决了这个问题,如下所示:
use POSIX;
my $g = 6.65;
my $t = $g * 4;
my $r = $t - $g;
my $n = $r / $g;
my $c = ceil("$n");
print "$c ($n)\n";

......但我很困惑为什么这里有必要。

最佳答案

发生的事情是这样的:$n包含一个浮点值,因此不完全等于 3 , 在我的电脑上是 3.00000000000000044409 . Perl 足够聪明,可以将其四舍五入为 3打印时,但当您明确使用浮点函数时,它将完全按照它的广告做:ceil到下一个整数:4 .

这是处理浮点数的现实,绝不是特定于 Perl 的。您不应该依赖它们的确切值。

关于perl - 在 Perl 中使用 POSIX ceil() 出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2379934/

相关文章:

Perl:if(列表中的元素)

perl - 计算包含数十万个文件的目录中文件数量的最快方法

Java float 到 long 显式转换

c - Posix AIO 损坏/损坏?

c - vm_insert_page() 和 remap_pfn_range() 有什么区别?

c - 返回字符串指针

Perl:Log4Perl 调用 log4perl 以防出现未处理的错误

perl - "undefined symbol: Perl_xs_apiversion_bootcheck"

c - 为什么 C 给我的答案与我的计算器不同?

lua - 使用 LUA 解码 UDP 消息