Возвратите первую цифру целого числа

Проблема с вашим кодом заключается в том, что next() ищет элементы одного уровня, но элементы input не являются элементами одного уровня.

Чтобы сделать то, что вам нужно, через обход DOM, вам нужно получить ближайшего родителя li от входа .prod, затем использовать next(), чтобы получить брата li, затем find() для получите вход .categ, например:

$("input.categ").val("cat");
$("input.prod").closest('li').next('li').find("input").val("dog");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li><input class="prod"></li>
  <li><input class="categ">I need "dog" value here</li> 
</ul>

Следует отметить, что в этом случае обход DOM скорее спорный, так как вы можете просто выбрать элемент $('.categ') напрямую, но я предполагаю, что это учебное упражнение.

24
задан Bill the Lizard 19 September 2012 в 22:04
поделиться

15 ответов

Этот способ работал для меня очень хорошо, но он включает в себя преобразование из int в строку и обратно в int.

Integer.parseInt(String.valueOf(x).substring(0,1));
-2
ответ дан The Halfling 28 November 2019 в 22:12
поделиться

Вот уменьшенная версия для получения цифр всех позиций, она работает с отрицательным значением (не десятичным).

int number = -23456;

int length = (int) Math.log10(Math.abs(number)) + 1; //This gets the length of the number of digits used
//Math.abs to change negative int to positive

System.out.println("Digit at pos " + 1 + " is :- " + (int)(Math.abs(number)/Math.pow(10,(length-1))));

for (int i = 2; i <= length; i++){
    System.out.println("Digit at pos " + i + " is :- " + (int)(Math.abs(number)/Math.pow(10,(length-i))%10));
}
-1
ответ дан Ali Azam 28 November 2019 в 22:12
поделиться

Это Groovy, но его легко конвертировать в Java:

int firstNum(int x) {
    a = Math.abs(x)
    sig = Math.floor(Math.log10(a))
    return a / Math.pow(10, sig)
}

Результаты:

groovy> println (firstNum (345))
3

groovy> println (firstNum (3452))
3

groovy> println (firstNum (-112))
1

groovy> println (firstNum (9999))
9

groovy> println (firstNum (Integer.MAX_VALUE))
2

groovy> println (firstNum (Integer.MIN_VALUE + 1))
2

-1
ответ дан matt b 28 November 2019 в 22:12
поделиться

Предположим, что число имеет тип int

, поэтому

int number = 352
// Change the int into String format
String numberString = Integer.toString(number);
// We can know the first digit of that String with substring method directly
Integer.parseInt(numberString.substring(0,1));

или другой способ состоит в том, чтобы преобразовать String в char и получить числовое значение из char

например,

int number = 352;
String numberString = Integer.toString(number);
Character.getNumericValue(String.valueOf(target).charAt(0)); 
// 0 means the first digit of the number
1
ответ дан Yu Wei Chen 28 November 2019 в 22:12
поделиться
int main(void) {
  int num = 3421;

  while (num*num + 10 - num*(1 + num) <= 0) {
    num *= (num - 0.9*num)/num;
  }

  std::cout << num << std::endl;
}
1
ответ дан Chip Uni 28 November 2019 в 22:12
поделиться

Самый быстрый способ будет:

  • Вычислить лог абс (х), а затем получить слово. Давайте назовем это п.
  • Разделите число на 10 ^ n
2
ответ дан fastcodejava 28 November 2019 в 22:12
поделиться

Обновлено: Чтобы обработать Integer.MIN_VALUE и оставить Math.abs () и приведение к длинному из цикла:

public static int getFirstDigit(int i) {
    i = Math.abs(i / (Math.abs((long)i) >= 10 ) ? 10 : 1);
    while (i >= 10 ) 
        i /= 10;
    return i;
}

Оригинальный ответ:

return Math.abs(i);
}    public static int getFirstDigit(int i) {
        while (Math.abs(i) >= 10 ) {
            i = i / 10;
        }
        return Math.abs(i);
    }
3
ответ дан Matthew Flynn 28 November 2019 в 22:12
поделиться

Игнорирование отрицательных значений приводит к:

(""+345).charAt(0);
7
ответ дан stacker 28 November 2019 в 22:12
поделиться
public static int firstDigit(int n) {
  while (n < -9 || 9 < n) n /= 10;
  return Math.abs(n);
}

Должны также хорошо справляться с отрицательными числами. В этом случае вернет отрицательную первую цифру.

18
ответ дан Carl Smotricz 28 November 2019 в 22:12
поделиться

Еще один способ:

public int firstDigit(int x) {
  if (x == 0) return 0;
  x = Math.abs(x);
  return (int) Math.floor(x / Math.pow(10, Math.floor(Math.log10(x))));
}
20
ответ дан liwp 28 November 2019 в 22:12
поделиться

Глядя на предоставленный код, кажется, что все усложняется, вот простое решение ...

int number = 4085;
int firstDigit = number;
while (firstDigit > 9)
{
      firstDigit = firstDigit / 10;
}
System.out.println("The First Digit is " + firstDigit);
1
ответ дан Ria 28 November 2019 в 22:12
поделиться

Простое Путь будет использоваться String.valueof (Math.abs ((длинный) х)). Чарат (0) - что Дадут вам как Char 1 . Чтобы получить это как целочисленное значение, вы можете просто вычесть «0» (как в Unicode, «0» до «9» являются смежными).

Это несколько расточительно, конечно. Альтернативой только что будет принимать абсолютное значение, а затем циклическое раунд разделяться на 10 до тех пор, пока число не будет в диапазоне 0-9. Если это домашнее задание, это ответ, которому я дал. Однако я не собираюсь предоставлять код для этого, потому что я думаю, что может Быть домашним заданием. Однако, если вы предоставляете комментарии и отредактируете свой ответ, чтобы объяснить, как вы делаете, и какие проблемы вы работаете, мы можем помочь.


1 Одна липкая точка к примечанию заключается в том, что абсолютное значение integer.min_value не может быть представлено как int - так что вы можете сначала преобразовать в Долго , затем используйте math.abs , затем делает арифметику. Вот почему там есть актеры.

40
ответ дан 28 November 2019 в 22:12
поделиться

Отсутствие рекурсивного решения:

int getFirstInt(int input) {
  if (input > 0 ? input < 10 : input > -10) {
    return input > 0 ? input : -input;
  }
  return getFirstInt(input / 10);
}

Я бы не использовал Тернарный оператор в реальной жизни, но - не так ли это красиво? ;)

6
ответ дан 28 November 2019 в 22:12
поделиться

Домашняя работа Подсказка: преобразуйте его в строку и верните первый символ.

2
ответ дан 28 November 2019 в 22:12
поделиться
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3
1
ответ дан 28 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

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