Bagaimana cara mengubah string menjadi angka di TypeScript?

876

Diberikan representasi string dari angka, bagaimana saya bisa mengubahnya untuk numbermengetikkan TypeScript?

var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;
Paul0515
sumber
2
@ o_nix Trik kompiler, tidak mengubah tipe ketik: console.log(typeof <number><any>"1", typeof Number("1"))akan dicetak string number.
k0pernikus

Jawaban:

1384

Persis seperti di JavaScript , Anda dapat menggunakan parseIntatau parseFloatfungsi, atau hanya menggunakan unary +Operator:

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

Semua teknik yang disebutkan akan memiliki pengetikan yang benar dan dengan benar akan mem-parsing bilangan bulat desimal sederhana seperti "123", tetapi akan berperilaku berbeda untuk berbagai kasus lainnya, yang mungkin diharapkan, (seperti "123.45") dan kasus sudut (seperti null).

Tabel konversi Tabel diambil dari jawaban ini

Ryan Cavanaugh
sumber
237
petunjuk kecil: parseInt (null) mengembalikan NaN tetapi + null mengembalikan 0
Robin J
17
Tidak ekspresif seperti jawaban Philip dengan nilai lebih tinggi di sini yang melakukan ini dengan cara TypeScript.
Patrick
10
Tidak ada cara TypeScript karena TypeScript hanya JavaScript.
Kamis,
47
@ thedayturns tidak ada cara pemrograman karena pemrograman hanya listrik
jiroch
1
@ Patrick tidak yakin mengapa Anda memanggil cara "TypeScript" karena itu juga Javascript biasa ...
Sandy Gifford
1092

Cara naskah untuk melakukan ini adalah:

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

seperti yang dijawab di sini: https://stackoverflow.com/a/23440948/2083492

Philip
sumber
4
Catatan: Anda dapat memeriksa NaN menggunakan isNaNfungsi ini.
Heinrich Ulbricht
2
Perhatikan bahwa ini tidak akan berfungsi: biarkan nilai: angka = valueAsString;
yonexbat
1
Saya pikir Number baru ("1234"). ValueOf () benar-benar yang kita semua cari
chrismarx
23
@Devid - Anda dapat menyederhanakan let a = Number('x') || 0;- Number('x')akan kembali NaN, yang merupakan "falsey". Oleh karena itu, aakan ditugaskan 0.Jauh lebih bersih dan bisa dibilang (sedikit) lebih cepat daripada menggunakan pernyataan ternary dan parsing dua kali.
Geoff James
4
@ Paul0515 dapatkah Anda memperbarui ini menjadi jawaban yang benar
Chris Lang
94

Untuk sesama pengguna Angular kami:

Di dalam templat , Number(x)dan parseInt(x)melempar kesalahan, dan +xtidak memiliki efek. Pengecoran yang valid adalah x*1atau x/1.

phil294
sumber
indah sekali! seperti yang Anda katakan dalam HTML + x sama sekali tidak dikonversi ke angka
sa_
3
Itu karena Numbertidak dalam lingkup evaluasi. Anda dapat menulis class MyComponent { Number = Number; }untuk menggunakannya.
Aluan Haddad
58

Seperti yang ditunjukkan oleh jawaban lain di sini, ada beberapa cara untuk melakukan konversi:

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

Saya ingin menyebutkan satu hal lagi parseInt.

Saat menggunakan parseInt, masuk akal untuk selalu melewati parameter radix . Untuk konversi desimal, yaitu 10. Ini adalah nilai default untuk parameter, itulah sebabnya mengapa bisa dihilangkan. Untuk biner, ini adalah 2dan 16untuk heksadesimal. Sebenarnya, setiap radix antara dan termasuk 2 dan 36 karya.

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

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

The parseIntfungsi, baik, mem-parsing string untuk mengkonversikannya ke nomor. Dalam beberapa implementasi JS, parseIntparsing nol memimpin sebagai oktal:

Meskipun berkecil hati oleh ECMAScript 3 dan dilarang oleh ECMAScript 5, banyak implementasi menafsirkan string numerik yang dimulai dengan awalan 0 sebagai oktal. Berikut ini mungkin memiliki hasil oktal, atau mungkin memiliki hasil desimal. Selalu tentukan radix untuk menghindari perilaku yang tidak dapat diandalkan ini.

- MDN

Fakta bahwa kode menjadi lebih jelas adalah efek samping yang bagus dari menentukan parameter radix.

Sejak parseFloat hanya mem-parsing ekspresi numerik dalam radix 10, tidak perlu untuk parameter radix di sini.

Lebih lanjut tentang ini:

Fabian Lauer
sumber
dan satu lagi: ~~ '123' (menggunakan internal ToInt32)
aMarCruz
@ aMarCruz benar, tapi saya akan berdebat jika ini secara semantik bermanfaat
Fabian Lauer
52

Menguraikan apa yang dikatakan Ryan, TypeScript merangkul idiom-idiom JavaScript secara umum.

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()

Semua detail mendalam yang menarik di Konversi Jenis JavaScript .

pengguna2040786
sumber
22

Anda dapat mengikuti salah satu dari cara berikut.

var str = '54';

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

Konversi string ke angka:

Dalam naskah, kami mengonversi string ke angka dengan cara berikut:

  • ParseInt(): Fungsi ini membutuhkan 2 argumen, yang pertama adalah string untuk diuraikan. Yang kedua adalah radix (basis dalam sistem angka matematika, misalnya 10 untuk desimal dan 2 untuk biner). Kemudian mengembalikan angka integer, jika karakter pertama tidak dapat dikonversi menjadi angka,NaN akan dikembalikan.
  • ParseFloat(): Mengambil sebagai argumen nilai yang ingin kita uraikan, dan mengembalikan angka floating point. Jika nilai tidak dapat dikonversi ke angka,NaN dikembalikan.
  • + operator: Operator ketika digunakan dengan tepat dapat memaksa nilai string menjadi angka.

Contoh:

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

Yang mana untuk digunakan?

  1. Gunakan ParseInt()saat Anda ingin string dikonversi menjadi integer . Namun, tipe data masih float, karena semua nilai angka adalah nilai floating point di TS . Juga gunakan metode ini ketika Anda perlu menentukan radix dari nomor yang ingin Anda parsing.
  2. Gunakan ParseFloat()saat Anda perlu mengurai string menjadi angka floating point .
  3. Anda dapat menggunakan +operator sebelum string untuk memaksa menjadi nomor floating point . Keuntungan dari ini adalah bahwa sintaksinya sangat pendek.
Willem van der Veen
sumber
7

Cara termudah adalah dengan menggunakan + strVal atau Number (strVal)

Contoh:

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
Ben Dev
sumber
2

Ada fungsi inbuilt seperti parseInt(), parseFloat()dan Number()di ScriptScript, Anda bisa menggunakannya.

Dewa Perkasa
sumber
2

Panggil fungsi dengan => convertstring ('10 .00 ')

parseFloat (string) => Dapat digunakan untuk mengonversi ke float, toFixed (4) => ke berapa banyak desimal

parseInt (str) => Dapat digunakan untuk mengonversi menjadi integer

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

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

Alat Konversi Nomor Online

Pengonversi Angka

pengguna2569050
sumber
1

Ada tiga cara

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

Ada banyak dari Anda mengalami masalah untuk mengkonversi tipe data yang sulit untuk dipecahkan dalam situasi pemrograman ionik, karena bahasa ini sangat baru, di sini saya akan merinci instruksi bagi pengguna untuk mengetahui cara mengkonversi tipe data ionik menjadi data string. ketik bilangan bulat.

Dalam bahasa pemrograman seperti java, php, c, c ++, ... semua dapat memindahkan data dengan mudah, maka secara ion juga dapat membuat konversi data bagi kita juga merupakan cara yang mudah tidak terkecuali dalam bahasa pemrograman lain.

this.mPosition = parseInt("");
Tienanhvn
sumber
0

jika Anda berbicara tentang jenis saja, seperti kata orang lain, parseInt () dll akan mengembalikan jenis yang benar. Juga, jika karena alasan apa pun nilainya bisa berupa angka atau string dan Anda tidak ingin memanggil parseInt (), typeof ekspresi juga akan dilemparkan ke jenis yang benar:

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

Ini adalah versi modifikasi dari fungsi StrToNumber. Seperti sebelumnya,

  1. Ini memungkinkan tanda opsional muncul di depan atau di belakang nilai numerik.
  2. Ia melakukan pemeriksaan untuk memverifikasi bahwa hanya ada satu tanda di kepala atau ujung tali.
  3. Jika kesalahan terjadi, nilai default "lulus" dikembalikan.

Tanggapan ini adalah solusi yang mungkin lebih cocok untuk pertanyaan awal daripada posting saya sebelumnya.

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

James W Simms
sumber
0

naskah perlu tahu bahwa kita var aakan menjadiNumber || 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);
}
Ernesto
sumber
-1

Anda selalu dapat menggunakan opsi pemeran. Pertama, Anda harus mengubah objek Anda menjadi tipe "tidak dikenal" dan kemudian melemparkannya ke jenis objek yang diharapkan.

let subID:number = 0;

subID = <number><unknown> await obj_s1aSite.submissionTableFirstID.getText();
Gaj Julije
sumber
TypeScript hanya memiliki petunjuk tipe, tanpa tipe casting. Ini mengelabui kompiler untuk berpikir itu angka, saat runtime itu masih akan menjadi string kecuali Anda menguraikannya.
k0pernikus
console.log(typeof <number><unknown>"1", typeof Number("1"))akan dicetak string number.
k0pernikus