2013-09-08 5 views
-4

Как проверить, больше ли число с плавающей запятой больше числа на Perl?Сравнение плавающей запятой с другим номером

т.е. 100,4> 90

Я пытался работать с use POSIX, округляя 100,4 до 101,0 и преобразование их обоих с междунар, но Perl все еще думает, что мой 100,4 меньше, чем моя 90.

Изменить: ошибка была где-то в другом месте. Частный код возвращал мне иногда правду, а иногда и ложную.

+5

Perl не сделал что-то не так, вы сделали. Покажите код, который создает описанное вами поведение, и мы можем сказать вам, что вы сделали неправильно. – TLP

+1

не может воспроизвести: 'perl -E'say 0+ (100.4> 90)' '-' 1' и 'perl -MPOSIX = ceil -E 's 0+ (ceil (100.4)> ​​90)'' - '1' и 'perl -MPOSIX = ceil -E'say 0+ (int (ceil (100.4))> int (90)) '' - еще '1'. – amon

+1

'100.4 lt 90' истинно. '100.4 <90' нет. Первый - это сравнение строк, последнее - численное сравнение. – Zaid

ответ

3

Нет, Perl не «думать», что, и это легко проверить:

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

My (дикий) догадаться, что вы пытались отсортировать массив поплавки, и получил 100,4 положение Перед 90. Например, как это:

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 
+1

Это хорошая догадка, я думал, что это была какая-то неясная строчка, например. '' x100.4 "<90' или использовать', 'вместо' .', 'if (100,4> 90)' .. оба из них будут работать молча, если предупреждения отключены. – TLP