Tom*_*Tom -2 floating-point perl floating-point-comparison
当我运行以下Perl单线程时:
$ perl -e 'print "Oh no!\n" unless 1835 == 100*18.35'
Run Code Online (Sandbox Code Playgroud)
我明白了
Oh no!
这是为什么?
你缺少的是一个旧的计算机科学问题 - 浮点转换.
你看,你不能精确地将'0.35'表示为浮点数,因为它是二进制的周期数.
所以,如果你添加:
my $new = $a->{a} - $b;
print $new;
Run Code Online (Sandbox Code Playgroud)
你会得到:
2.27373675443232e-013
Run Code Online (Sandbox Code Playgroud)
$a->{a}
是非常多$b
,因此测试是正确的.
如果你有以下情况,你可以看到这个:
my $new_val = 18.35 - 18;
print $new_val;
Run Code Online (Sandbox Code Playgroud)
虽然我们在这里 - 不要使用$a
或$b
- 他们是保留的sort
.无论如何,单字母var名称都不是好的风格.
也是my $a = {};
多余的 - 没有必要像这样初始化一个空的哈希引用.
要做你想做的事,那么你需要比较'like types'或显式转换为整数:
$a->{a} = int(18.35 * 100);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
63 次 |
最近记录: |