-2

当我运行以下 Perl 单行代码时:

$ perl -e 'print "Oh no!\n" unless 1835 == 100*18.35'

我明白了

不好了!

这是为什么?

4

1 回答 1

7

您缺少的是一个古老的计算机科学问题 - 浮点转换。

您看,您不能将“0.35”精确地表示为浮点数,因为它是二进制的周期数。

因此,如果您添加:

my $new = $a->{a} - $b;
print $new;

你会得到:

2.27373675443232e-013

$a->{a} 多于$b,因此测试正确的。

如果您:

my $new_val = 18.35 - 18;
print $new_val;

虽然我们正在使用它 - 不要使用$a$b- 它们保留用于sort. 无论如何,单字母 var 名称都不是很好的风格。

也是my $a = {};多余的——没有必要像那样初始化一个空的哈希引用。

要执行您想要的操作,您需要比较“类似类型”或显式转换为整数:

$a->{a} = int(18.35 * 100);
于 2017-05-04T14:19:19.597 回答