Как я говорю, имеет ли переменная числовое значение в Perl?

Мне нужен контекст для использования фрагмента arrayAdapter IN, когда я использовал ошибку getActivity, но когда я заменяю его getContext, он работает для меня

listView LV=getView().findViewById(R.id.listOFsensors);
LV.setAdapter(new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1 ,listSensorType));
80
задан brian d foy 21 October 2009 в 10:30
поделиться

6 ответов

Используйте Scalar::Util::looks_like_number(), который использует внутренний Perl C looks_like_number API () функция, которая является, вероятно, самым эффективным способом сделать это. Обратите внимание, что строки "inf" и "бесконечность" рассматривают как числа.

Пример:

#!/usr/bin/perl

use warnings;
use strict;

use Scalar::Util qw(looks_like_number);

my @exprs = qw(1 5.25 0.001 1.3e8 foo bar 1dd inf infinity);

foreach my $expr (@exprs) {
    print "$expr is", looks_like_number($expr) ? '' : ' not', " a number\n";
}

Дает этот вывод:

1 is a number
5.25 is a number
0.001 is a number
1.3e8 is a number
foo is not a number
bar is not a number
1dd is not a number
inf is a number
infinity is a number

См. также:

123
ответ дан cxw 24 November 2019 в 09:49
поделиться

Я не полагаю, что существует что-либо встроенное, чтобы сделать это. Для больше, чем Вы когда-либо хотели видеть на предмете, видеть Perlmonks при Обнаружении Числового

3
ответ дан jsight 24 November 2019 в 09:49
поделиться

Не прекрасный, но можно использовать regex:

sub isnumber 
{
    shift =~ /^-?\d+\.?\d*$/;
}
3
ответ дан farmerchris 24 November 2019 в 09:49
поделиться

Обычно проверка числа сделана с регулярными выражениями. Этот код определит, является ли что-то числовым, а также проверка на неопределенные переменные относительно не бросают предупреждения:

sub is_integer {
   defined $_[0] && $_[0] =~ /^[+-]?\d+$/;
}

sub is_float {
   defined $_[0] && $_[0] =~ /^[+-]?\d+(\.\d+)?$/;
}

Вот некоторый материал чтения, на который необходимо посмотреть.

7
ответ дан andrewrk 24 November 2019 в 09:49
поделиться

Проверьте модуль CPAN Regexp:: Распространенный . Я думаю, что это делает точно, в чем Вы нуждаетесь, и обрабатывает все пограничные случаи (например, вещественные числа, экспоненциальное представление, и т.д.). например,

use Regexp::Common;
if ($var =~ /$RE{num}{real}/) { print q{a number}; }
23
ответ дан brian d foy 24 November 2019 в 09:49
поделиться

Немного больше устойчивого regex может быть найдено в Regexp:: Распространенный .

Это кажется, что Вы хотите знать, думает ли Perl, что переменная является числовой. Вот функция, которая захватывает то предупреждение:

sub is_number{
  my $n = shift;
  my $ret = 1;
  $SIG{"__WARN__"} = sub {$ret = 0};
  eval { my $x = $n + 1 };
  return $ret
}

Другая опция состоит в том, чтобы выключить предупреждение локально:

{
  no warnings "numeric"; # Ignore "isn't numeric" warning
  ...                    # Use a variable that might not be numeric
}

Примечание, что нечисловые переменные будут тихо преобразованы в 0, который является, вероятно, что Вы хотели так или иначе.

2
ответ дан brian d foy 24 November 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: