Ошибка преобразования строки в int [duplicate]

Вы используете массив как объект, разница между getElementbyId и getElementsByClassName такова:

  • getElementbyId вернет вам объект.
  • getElementsByClassName вернет вам массив.

getElementsByClassName

Метод getElementsByClassName(classNames) принимает строку, содержащую неупорядоченный набор уникальных разделенных пробелами маркеры, представляющие классы. При вызове метод должен возвращать живой объект NodeList, содержащий все элементы документа, которые имеют все классы, указанные в этом аргументе, получив классы, разделив строку на пробелы. Если в аргументе нет токенов, тогда метод должен возвращать пустой NodeList.

https://www.w3.org/TR/2008/WD-html5 -20080610 / dom.html # getelementsbyclassname

getElementById

Метод getElementById () обращается к первому элементу с указанным id.

http://www.w3schools.com/jsref/met_doc_getelementbyid.asp

в вашем коде строки:

1- document.getElementsByClassName ('myElement'). Style.size = '100px';

НЕ будет работать, как ожидалось, потому что getElementByClassName вернет массив, и массив будет НЕ имеет свойство style, вы будете обращаться к каждому element, итерации их.

Вот почему функция getElementById работает на вас, эта функция вернет вам прямой объект, и поэтому вы сможет получить доступ к свойству style.

16
задан John Saunders 20 March 2012 в 14:34
поделиться

6 ответов

Я знаю, что этот вопрос немного устарел, однако я столкнулся с подобным случаем в одном из моих проектов и принял этот вопрос и решил поделиться своим решением, которое отлично сработало для меня, и надеюсь, что он будет служить другим тем же.

private string ConvertToWesternArbicNumerals(string input)
{
    var result = new StringBuilder(input.Length);

    foreach (char c in input.ToCharArray())
    {
        //Check if the characters is recognized as UNICODE numeric value if yes
        if (char.IsNumber(c))
        {
            // using char.GetNumericValue() convert numeric Unicode to a double-precision 
            // floating point number (returns the numeric value of the passed char)
            // apend to final string holder
            result.Append(char.GetNumericValue(c));
        }
        else
        {
            // apend non numeric chars to recreate the orignal string with the converted numbers
            result.Append(c);
        }
    }

    return result.ToString();
}

теперь вы можете просто вызвать функцию, чтобы вернуть западные арабские цифры.

0
ответ дан Leonardo Alves Machado 21 August 2018 в 01:07
поделиться

, чтобы получить значение цифры, вычтите из него нулевой символ, например, в нормальном цифровом, '1'-'0' = 1, '2'-'0' = 2. и т. д.

Для многозначного числа вы можете использовать что-то вроде этого

 result =0;
 foreach(char digit in number)
 {
     result *= 10; //shift the digit, multiply by ten for each shift
     result += (digit - '0)'; //add the int value of the current digit.
 }

, просто замените «0» на арабский нуль, если ваш номер использует арабский символ. Это работает для любых числовых символов, если 0-9 в этой системе символов закодированы последовательно.

0
ответ дан Louis Rhys 21 August 2018 в 01:07
поделиться
  • 1
    Это по-прежнему не очень убедительно доказывает интернационализацию; Что относительно непальских или китайских цифр? – Luis Filipe 23 November 2015 в 18:00

использовать этот метод

private string toEnglishNumber(string input)
{
    string EnglishNumbers = "";

    for (int i = 0; i < input.Length; i++)
    {
        if (Char.IsDigit(input[i]))
        {
            EnglishNumbers += char.GetNumericValue(input, i);
        }
        else
        {
            EnglishNumbers += input[i].ToString();
        }           
    }
    return EnglishNumbers;
}
12
ответ дан maccettura 21 August 2018 в 01:07
поделиться
  • 1
    Действительно понравилось это, потому что вы можете перевести любой string, даже если это не «все цифры». как даты и т. д. – ehsan88 8 September 2015 в 08:23

Простой способ преобразования арабских чисел в integer

    string EnglishNumbers="";
    for (int i = 0; i < arabicnumbers.Length; i++)
    {
        EnglishNumbers += char.GetNumericValue(arabicnumbers, i);
    }
    int convertednumber=Convert.ToInt32(EnglishNumbers);
7
ответ дан Mahmoodvcs 21 August 2018 в 01:07
поделиться

К сожалению, пока невозможно разобрать полное строковое представление, передав соответствующий IFormatProvider (возможно, в будущих версиях). Однако тип char имеет метод GetNumericValue, который преобразует любой числовой символ Unicode в double. Например:

double two = char.GetNumericValue('٢');
Console.WriteLine(two); // prints 2

Вы можете использовать его для преобразования одной цифры за раз.

6
ответ дан Saeb Amini 21 August 2018 в 01:07
поделиться

Арабские цифры, такие как 1,2,3,4 в юникоде, кодируются как символы в диапазоне от 1632 до 1641. Вычтите unicode для арабского нуля (1632) из ​​значения unicode каждой арабской цифры чтобы получить свои цифровые значения. Умножьте каждое цифровое значение на его значение места и суммируйте результаты, чтобы получить целое число.

Альтернативно используйте Regex.Replace для преобразования строки с арабскими цифрами в строку с десятичными цифрами, затем используйте Int.Parse для преобразования результат в целое число.

9
ответ дан Terje Norderhaug 21 August 2018 в 01:07
поделиться
  • 1
    Я бы предположил, что int.Parse может обрабатывать арабские кодовые точки без специального обращения. Однако у меня нет компилятора C #, чтобы проверить его. Я достаточно уверен, что char.IsNumeric test возвращает true для этих символов. Вы проверили, что вам нужна одна из предложенных вами методик? – phoog 4 May 2011 в 08:04
  • 2
    Да, Tarje Я думаю, что ваше решение правильно, я могу извлечь значение арабских цифр, например, значение для 4 (4) равно 1636, но сейчас у меня есть проблема, чтобы преобразовать это значение в, вот мой код: if (char.IsDigit(c)) { bytes[1] = Convert.ToByte( char.GetNumericValue(c)); utf8Decoder.GetChars(bytes, 0, 2, convertedChar, 0); convertedChars.Append(convertedChar[0]); } в код здесь: utf8Decoder.GetChars (байты, 0, 2, convertChar, 0); говорит, что буфер слишком мал или большой. – Shaahin 4 May 2011 в 08:10
  • 3
    Дорогой, спасибо за помощь: я нашел другое решение, я могу использовать Switch вместо разговора. еще раз спасибо – Shaahin 4 May 2011 в 08:46
  • 4
    Если вы собираетесь использовать любой из предложенных методов, помните, что в Unicode есть два диапазона для арабских чисел (на самом деле один для персидских)! [Д0] stackoverflow.com/questions/1676460/… – Ali 24 July 2016 в 20:35
Другие вопросы по тегам:

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