TypeScript Преобразование строки в число

Любое предложение о том, как преобразовать строку в число в TypeScript?

var aNumber : number = "1"; // --> Error

// Could this be done?
var defaultValue = 0;
var aNumber : number = "1".toInt32(defaultValue);

// Or ..
var defaultValue = 0;
var aNumber : number = StringToInt("1", defaultValue);

Обновление: Я сделал несколько дополнительных озадачиваний, лучший софт, который я придумал:   var aNumber: number = ( "1" ) * 1;

проверка, если строка является числовой, здесь: В Typescript, как проверить, является ли строка числовой.

Ответ 1

Вы можете использовать функции parseInt или parseFloat или просто использовать унарный оператор +:

var x = "32";
var y = +x; // y: number

Ответ 2

Typescript способ сделать это:

Number('1234') // 1234
Number('9BX9') // NaN

как указано здесь: fooobar.com/questions/27790/...

Ответ 3

Для наших пользователей Angular:

В шаблоне, Number(x) и parseInt(x) выдается ошибка, а +x не действует. Действительное кастинг будет x*1 или x/1.

Ответ 4

Излагая то, что сказал Райан, TypeScript охватывает идиомы JavaScript вообще.

var n = +"1"; // the unary + converts to number
var b = !!"2"; // the !! converts truthy to true, and falsy to false
var s = ""+3; // the ""+ converts to string via toString()

Все интересные подробные сведения в Преобразование типа JavaScript.

Ответ 5

Как показано в других ответах, существует несколько способов сделать преобразование:

Number('123');
+'123';
parseInt('123');
parseFloat('123.45')

Я хотел бы упомянуть еще об этом на parseInt.

При использовании parseInt имеет смысл всегда передавать параметр radix. Для десятичного преобразования, то есть 10. Это значение по умолчанию для параметра, поэтому его можно опустить. Для двоичных файлов это a 2 и 16 для шестнадцатеричного. Фактически, любое основание между и в том числе 2 и 36 работает.

parseInt('123')         // 123 (don't do this)
parseInt('123', 10)     // 123 (much better)

parseInt('1101', 2)     // 13
parseInt('0xfae3', 16)  // 64227

Функция parseInt, ну, анализирует строки, чтобы преобразовать их в числа. В некоторых реализациях JS parseInt анализирует начальные нули как восьмеричные:

Несмотря на то, что ECMAScript 3 не рекомендуется ECMAScript 3 и запрещен ECMAScript 5, многие реализации интерпретируют числовую строку, начинающуюся с ведущего 0 как восьмеричного. Следующий может иметь восьмеричный результат, или он может иметь десятичный результат. Всегда указывайте основание, чтобы избежать этого ненадежного поведения.

- MDN

Тот факт, что код становится яснее, является хорошим побочным эффектом указания параметра radix.

Так как parseFloat анализирует только числовые выражения в radix 10, здесь нет необходимости использовать параметр radix.

Подробнее об этом:

Ответ 6

Вы можете выполнить один из следующих способов.

var str = '54';

var num = +str; //easy way by using + operator
var num = parseInt(str); //by using the parseInt operation 

Ответ 7

Преобразование строки в число:

В Typescript мы конвертируем строку в число следующими способами:

  • ParseInt(): эта функция принимает 2 аргумента, первый - строка для анализа. Второй - основание (основание в математических системах счисления, например, 10 для десятичной и 2 для двоичной). Затем он возвращает целое число, если первый символ не может быть преобразован в число, будет возвращен NaN.
  • ParseFloat(): принимает в качестве аргумента значение, которое мы хотим проанализировать, и возвращает число с плавающей запятой. Если значение не может быть преобразовано в число, возвращается NaN.
  • Оператор +: при правильном использовании оператор может преобразовать строковое значение в число.

Примеры:

/*    parseInt   */

// note that a whole number is returned, so it will round the number
console.log(parseInt('51.023124'));

// parseInt will 'cut off' any part of the string which is not a number
console.log(parseInt('5adfe1234'));

// When the string starts with non number NaN is returned
console.log(parseInt('z123'));

console.log('--------');

/*    parseFloat   */

// parses the string into a number and keeping the precision of the number
console.log(typeof parseFloat('1.12321423'));

// parseFloat will 'cut off' any part of the string which is not a number
console.log(parseFloat('5.5abc'));

console.log('--------');

/*   + operator   */

let myString = '12345'

console.log(typeof +myString);

let myOtherString = '10ab'

// + operator will not cut off any 'non number' string part and will return NaN
console.log(+myOtherString);

Ответ 8

В Typescript есть встроенные функции, такие как parseInt(), parseFloat() и Number(), которые вы можете использовать.

Ответ 9

Вызовите функцию с помощью>> converttstring ('10.00 ')

parseFloat (string) => Может использоваться для преобразования в float, toFixed (4) => во сколько десятичных знаков

parseInt (str) => Может использоваться для преобразования в целое число

convertstring(string){
    let number_parsed: any = parseFloat(string).toFixed(4)
    return number_parsed
}

Ответ 10

converttstring (string) {let number_parsed: any = parseFloat (string).toFixed(4) return number_parsed} введите описание ссылки здесь

Ответ 11

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

В таких языках программирования, как java, php, c, c++,... все могут легко перемещать данные, тогда как в ionic можно также создавать для нас преобразование данных, что также является простым способом, не в последнюю очередь в других языках программирования.

this.mPosition = parseInt("");

Ответ 12

Есть три способа

 let a = + '12'; 
 let b = parseInt('12' , 10); // 10 means decimal number
 let c = Number('12');

Ответ 13

если вы говорите только о типах, как говорили другие, parseInt() и т.д. вернет правильный тип. Кроме того, если по какой-либо причине значением может быть как число, так и строка, и вы не хотите вызывать parseInt(), выражения typeof также приведут к правильному типу:

function f(value:number|string){
  if(typeof value==='number'){
   // value : number
  }else {
   // value : string
  }
}

Ответ 14

Вот модифицированная версия функции StrToNumber. Как и прежде,

  1. Это позволяет дополнительный знак появляться перед или позади числового значения.
  2. Он выполняет проверку, чтобы убедиться, что есть только один знак в начале или в конце строки.
  3. Если возникает ошибка, возвращается "переданное" значение по умолчанию.

Этот ответ является возможным решением, которое лучше подходит для первоначального вопроса, чем мой предыдущий пост.

   static StrToNumber(val: string, defaultVal:number = 0): number
   {        
      let result:number = defaultVal;      
      if(val == null) 
         return result;            
      if(val.length == 0) 
         return result;      
      val = val.trim();
      if(val.length == 0) 
         return(result);
      let sign:number = 1;     
      //
      // . obtain sign from string, and place result in "sign" local variable. The Sign naturally defaults to positive
      //     1 for positive, -1 for negative.
      // . remove sign character from val. 
      //      Note, before the function returns, the result is multiplied by the sign local variable to reflect the sign.
      // . error check for multiple sign characters
      // . error check to make sure sign character is at the head or tail of the string
      //              
      {  
         let positiveSignIndex = val.indexOf('+');
         let negativeSignIndex = val.indexOf('-');
         let nTailIndex = val.length-1;
         //
         // make sure both negative and positive signs are not in the string
         //
         if( (positiveSignIndex != -1) && (negativeSignIndex != -1) ) 
             return result;
         //
         // handle postive sign
         //
         if (positiveSignIndex != -1)
         {
            //
            // make sure there is only one sign character
            //
            if( (positiveSignIndex != val.lastIndexOf('+')) )
             return result;     
             //
             // make sure the sign is at the head or tail
             //
             if( (positiveSignIndex > 0) && (positiveSignIndex < nTailIndex )  )
                 return result;
             //
             // remove sign from string
             //
             val = val.replace("+","").trim();                 
         }    
         //
         // handle negative sign
         //
         if (negativeSignIndex != -1)
         {
            //
            // make sure there is only one sign character
            //
            if( (negativeSignIndex != val.lastIndexOf('-')) )
             return result;     
             //
             // make sure the sign is at the head or tail
             //
             if( (negativeSignIndex > 0) && (negativeSignIndex < nTailIndex )  )
                 return result;
             //
             // remove sign from string
             //
             val = val.replace("-","").trim();  
             sign = -1;                 
         }               
         //
         // make sure text length is greater than 0
         //       
         if(val.length == 0) 
            return result;                             
      }   
      //
      // convert string to a number
      //
      var r = +(<any>val);
      if( (r != null) && (!isNaN(r)) )
      {          
         result = r*sign;         
      }
      return(result);    
   }

Ответ 15

var myNumber: number = 1200;
//convert to hexadecimal value
console.log(myNumber.toString(16)); //will return  4b0
//Other way of converting to hexadecimal
console.log(Math.abs(myNumber).toString(16)); //will return  4b0
//convert to decimal value
console.log(parseFloat(myNumber.toString()).toFixed(2)); //will return  1200.00

Ответ 16

Вы всегда можете использовать опцию приведения. Сначала вы должны преобразовать ваш объект в "неизвестный" тип, а затем привести его к ожидаемому типу объекта.

let subID:number = 0;

subID = <number><unknown> await obj_s1aSite.submissionTableFirstID.getText();