Bir dizeyi TypeScript'te sayıya nasıl dönüştürürüm?


876

Bir sayının dize olarak temsili verildiğinde, bunu numberTypeScript'te türe nasıl dönüştürebilirim ?

var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;


2
@o_nix Derleyiciyi kandırır, tür türünü değiştirmez: console.log(typeof <number><any>"1", typeof Number("1"))yazdırır string number.
k0pernikus

Yanıtlar:


1382

Tıpkı JavaScript'te olduğu gibi , parseIntveya parseFloatişlevlerini kullanabilir veya yalnızca tekli +işleci kullanabilirsiniz :

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

Bahsedilen tekniklerin tümü doğru yazmaya sahip olacak ve basit ondalık tam sayı dizelerini doğru şekilde ayrıştıracak "123", ancak diğer olası, muhtemelen beklenen durumlar (gibi "123.45") ve köşe vakaları (gibi null) için farklı davranacaktır .

Dönüşüm tablosuBu cevaptan alınan tablo


236
küçük ipucu: parseInt (null) NaN döndürür ancak + null 0 döndürür
Robin J

17
Philip'in buradaki TypeScript yolunu yapan daha yüksek puanlı yanıtı kadar etkileyici değil.
Patrick

10
TypeScript yolu yoktur çünkü TypeScript sadece JavaScripttir.
thedayturns

47
@thedayturns programlama sadece elektrik olduğu için programlama yolu yok
jiroch

1
@Patrick, neden sadece düz Javascript olduğu için "TypeScript" yolunu çağırdığınızdan emin değil ...
Sandy Gifford

1092

Bunu yapmak için daktilo yolu:

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

burada yanıtlandığı gibi: https://stackoverflow.com/a/23440948/2083492


4
Not: NaN isNaNfonksiyonunu kullanarak kontrol edebilirsiniz .
Heinrich Ulbricht

2
Bunun çalışmadığını unutmayın: let value: number = valueAsString;
yonexbat

1
Sanırım yeni Sayı ("1234"). ValueOf () gerçekten hepimizin aradığı şey-
chrismarx

23
@Devid - basitleştirmek olabilir let a = Number('x') || 0;- "falsey" olan Number('x')dönecekti NaN. Bu nedenle, üçlü ifadeyi kullanmaktan ve iki kez ayrıştırmaktan çok daha temiz ve tartışmalı olarak (biraz) daha hızlı aatanır 0..
Geoff James

4
@ Paul0515 bunu doğru cevap olarak güncelleyebilir misin
Chris Lang

94

Diğer Açısal kullanıcılarımız için:

Bir dahilinde şablona , Number(x)ve parseInt(x)bir hata atıyor ve +xhiçbir etkisi olmaz. Geçerli döküm x*1veya olacaktır x/1.


bu harika! HTML + x'de söylediğiniz gibi, sayıya hiç
dönüşmüyor

3
Çünkü Numberdeğerlendirme kapsamında değil. Kullanmak için yazabilirsiniz class MyComponent { Number = Number; }.
Aluan Haddad

58

Burada diğer cevapların gösterdiği gibi, dönüşümü yapmanın birden çok yolu vardır:

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

parseIntYine de bir şeyden daha bahsetmek istiyorum .

Kullanırken parseInt, daima radix parametresini geçmek mantıklıdır . Ondalık dönüşüm için 10. Bu nedenle parametresi için varsayılan değerdir olabilir atlanabilir. İkili için, bir 2ve 16onaltılıktır. Aslında, 2 ile 36 arasında herhangi bir yarıçap çalışır.

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

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

parseIntFonksiyonu, iyi, sayılara dönüştürmek için dizeleri ayrıştırır. Bazı JS uygulamalarında, parseIntönde gelen sıfırları sekizlik olarak ayrıştırır:

ECMAScript 3 tarafından önerilmemesine ve ECMAScript 5 tarafından yasaklanmasına rağmen, birçok uygulama, 0 başından başlayarak sayısal bir dizgiyi sekizlik olarak yorumlar. Aşağıdakilerin sekizlik bir sonucu olabilir veya ondalık bir sonucu olabilir. Bu güvenilmez davranışı önlemek için her zaman bir sayı tabanı belirleyin.

- MDN

Kodun daha açık olması, radix parametresini belirtmenin hoş bir yan etkisidir.

Yana parseFloatsadece tabanda 10 sayısal ifadeler ayrıştırır, burada bir sayı tabanı parametresi için gerek yoktur.

Bu konuda daha fazlası:


ve bir tane daha: ~~ '123' (dahili ToInt32 kullanarak)
aMarCruz

@ aMarCruz doğru, ama bu anlamsal olarak yararlı olursa tartışırım
Fabian Lauer

52

Ryan'ın söylediklerine yanıt veren TypeScript, genel olarak JavaScript deyimlerini benimser.

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 Türü Dönüştürme'deki tüm ilginç derinlemesine ayrıntılar .


22

Aşağıdaki yollardan birini uygulayabilirsiniz.

var str = '54';

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

13

Dizeden sayıya dönüşüm:

Typcript'te, bir dizeyi aşağıdaki yollarla bir sayıya dönüştürürüz:

  • ParseInt(): Bu işlev 2 argüman alır, ilki ayrıştırılacak bir dizedir. İkincisi yarıçaptır (matematiksel sayısal sistemlerde baz, örneğin ondalık için 10 ve ikili için 2). Daha sonra, ilk karakter bir sayıya dönüştürülemiyorsa tam sayı döndürür,NaN döndürülür.
  • ParseFloat(): Bağımsız değişken olarak ayrıştırmak istediğimiz değeri alır ve bir kayan nokta sayısı döndürür. Değer bir sayıya dönüştürülemezse NaNdöndürülür.
  • + işleç: Uygun şekilde kullanıldığında işleç, bir dize değerini sayıya zorlayabilir.

Örnekler:

/*    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);

Hangisi kullanılır?

  1. ParseInt()Bir dizenin tamsayıya dönüştürülmesini istediğinizde kullanın . Ancak, veri türü hala kayan noktalı sayıdır , çünkü tüm sayı değerleri TS'deki kayan nokta değerleridir . Ayrıştırmak istediğiniz sayının yarıçapını belirtmeniz gerektiğinde de bu yöntemi kullanın.
  2. ParseFloat()Bir dizeyi kayan nokta numarasına ayrıştırmanız gerektiğinde kullanın .
  3. +Bir kayan nokta numarasına zorlamak için bir dizeden önce operatörü kullanabilirsiniz . Bunun avantajı sözdiziminin çok kısa olmasıdır.

7

En kolay yol + strVal veya Number (strVal) kullanmaktır

Örnekler:

let strVal1 = "123.5"
let strVal2 = "One"
let val1a = +strVal1
let val1b = Number(strVal1)
let val1c = parseFloat(strVal1)
let val1d = parseInt(strVal1)
let val1e = +strVal1 - parseInt(strVal1)
let val2a = +strVal2

console.log("val1a->", val1a) // 123.5
console.log("val1b->", val1b) // 123.5
console.log("val1c->", val1c) // 123.5
console.log("val1d->", val1d) // 123
console.log("val1e->", val1e) // 0.5
console.log("val2a->", val2a) // NaN


2

İşlevi => convertstring ('10 .00 ') ile çağırın

parseFloat (string) => Kayan noktaya dönüştürmek için kullanılabilir, toFixed (4) => ne kadar ondalık sayıya

parseInt (str) => Tamsayıya dönüştürmek için kullanılabilir

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


1

Üç yol var

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

0

Birçoğunuz, iyonik programlama durumlarında veri türlerini çözmek zor bir sorun yaşıyorsanız, bu dil yeni olduğundan, burada kullanıcının iyonik tiplerini dize verilerine nasıl dönüştüreceğini bilmesi için talimatları ayrıntılı olarak açıklayacağım tamsayı yazın.

Java, php, c, c ++, ... gibi programlama dillerinde hepsi kolayca veri taşıyabilir, o zaman iyonik olarak bizim için veri dönüşümü de diğer programlama dillerinde değil kolay bir yoldur.

this.mPosition = parseInt("");

0

sadece türler hakkında konuşuyorsanız, diğer insanların söylediği gibi, parseInt () vb. doğru türü döndürür. Ayrıca, herhangi bir nedenle değer hem sayı hem de dize olabilirse ve parseInt () öğesini çağırmak istemiyorsanız, typeof ifadeleri de doğru türe dönüştürülür:

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

0

İşte StrToNumber işlevinin değiştirilmiş bir sürümü. Eskisi gibi,

  1. Sayısal değerin önünde veya arkasında isteğe bağlı bir işaretin görünmesini sağlar.
  2. Dizenin başında veya kuyruğunda yalnızca bir işaret olduğunu doğrulamak için bir denetim gerçekleştirir.
  3. Bir hata oluşursa, "geçti" varsayılan değeri döndürülür.

Bu yanıt, önceki soruya göre ilk soruya daha uygun olan olası bir çözümdür.

   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);    
   }


0

typescript bizim bilmesi gerek var aeter olacakNumber || String

export type StringOrNumber = number | string;

export function toString (v: StringOrNumber) {
 return `${v}`;
}


export function toNumber (v: StringOrNumber) {
 return Number(v);
}

export function toggle (v: StringOrNumber) {
 return typeof v === "number" ? `${v}` : Number(v);
}

-1

Her zaman yayınla seçeneğini kullanabilirsiniz. İlk olarak, nesnenizi "bilinmeyen" türüne dönüştürmeli ve sonra beklenen bir nesne türüne dönüştürmelisiniz.

let subID:number = 0;

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

TypeScript yalnızca tür ipuçlarına sahiptir, tür dökümü yoktur. Derleyiciyi bir sayı olduğunu düşünmeye zorlar, çalışma zamanında ayrıştırmazsanız hala bir dize olacaktır.
k0pernikus

console.log(typeof <number><unknown>"1", typeof Number("1"))yazdıracaktır string number.
k0pernikus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.