当我运行以下 Perl 单行代码时:
$ perl -e 'print "Oh no!\n" unless 1835 == 100*18.35'
我明白了
不好了!
这是为什么?
当我运行以下 Perl 单行代码时:
$ perl -e 'print "Oh no!\n" unless 1835 == 100*18.35'
我明白了
不好了!
这是为什么?
您缺少的是一个古老的计算机科学问题 - 浮点转换。
您看,您不能将“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);