将浮点数与另一个数字进行比较

时间:2013-09-08 15:25:56

标签: perl floating-point

如何检查一个浮点数是否大于Perl中的另一个数字?

即:100.4> 90

我尝试使用use POSIX,将100.4舍入为101.0并使用int转换它们,但Perl仍然认为我的100.4小于90.

编辑:错误发生在其他地方。私密的代码有时让我感到真实,有时也是假的。

1 个答案:

答案 0 :(得分:3)

不,Perl并不“想”那个,这很容易检查:

print 100.4 > 90 ? 'Greater' : 'Lesser'; # Greater

我的(狂野)猜测是你试图对一系列花车进行排序,并在90之前得到100.4。例如,像这样:

my @floats = (100.4, 50, 9);
print $_, "\n" for sort @floats; 
# 100.4
# 50
# 9

问题是默认情况下Perl在sort中使用字符串比较。因此,100.4和90都首先转换为字符串,而'100.4'确实小于'9',因为'1'小于'9'(字符串比较char-by-char )。

解决方案很简单:在处理数字时覆盖排序例程。

print $_, "\n" for sort { $a <=> $b } @floats; 
# 9
# 50
# 100.4