当我运行以下Perl单线程时:
$ perl -e 'print "Oh no!\n" unless 1835 == 100*18.35'
我得到了
Oh no!
为什么?
答案 0 :(得分: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);