วิธีการแปลงสตริงเป็นตัวเลขใน TypeScript?


876

ด้วยการแสดงตัวเลขของสตริงฉันจะแปลงเป็นnumberTypeScript ได้อย่างไร?

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


2
@o_nix มันเทคนิคคอมไพเลอร์จะไม่เปลี่ยนประเภทประเภท: จะพิมพ์console.log(typeof <number><any>"1", typeof Number("1")) string number
k0pernikus

คำตอบ:


1382

เหมือนกับ ใน JavaScriptคุณสามารถใช้parseIntหรือparseFloatฟังก์ชั่นหรือใช้ตัวดำเนิน+การunary :

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

เทคนิคที่กล่าวถึงทั้งหมดจะมีการพิมพ์ที่ถูกต้องและจะวิเคราะห์สตริงสตริงเลขจำนวนเต็มอย่างง่ายเช่น"123"แต่จะทำงานแตกต่างกันสำหรับกรณีอื่น ๆ ที่คาดว่าจะเป็นกรณี (เช่น"123.45") และกรณีมุม (เช่นnull)

ตารางการแปลง ตารางที่นำมาจาก คำตอบนี้


236
คำใบ้ขนาดเล็ก: parseInt (null) ส่งคืน NaN แต่ + null ส่งคืน 0
Robin J

17
ไม่ชัดเจนเท่าคำตอบที่ได้รับคะแนนสูงกว่าของ Philip ที่นี่ซึ่งเป็นวิธีของ TypeScript
แพทริค

10
ไม่มีวิธีของ TypeScript เนื่องจาก TypeScript เป็นเพียง JavaScript
thedayturns

47
@thayturns ไม่มีวิธีการเขียนโปรแกรมเนื่องจากการเขียนโปรแกรมเป็นเพียงการใช้ไฟฟ้า
jiroch

1
@ แพทริกไม่แน่ใจว่าทำไมคุณถึงเรียกว่า "TypeScript" เพราะมันเป็นแค่ Javascript ธรรมดา ...
Sandy Gifford

1092

วิธี typescript ในการทำเช่นนี้จะเป็น:

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

ตามที่ตอบแล้วที่นี่: https://stackoverflow.com/a/23440948/2083492


4
หมายเหตุ: คุณสามารถตรวจสอบ NaN โดยใช้isNaNฟังก์ชั่น
เฮ็น Ulbricht

2
โปรดทราบว่าสิ่งนี้จะไม่ทำงาน: ให้ค่า: number = valueAsString;
yonexbat

1
ฉันคิดว่าหมายเลขใหม่ ("1234") valueOf () เป็นสิ่งที่เราทุกคนกำลังมองหา
chrismarx

23
@Devid - คุณสามารถทำให้ง่ายขึ้นlet a = Number('x') || 0;- Number('x')จะกลับมาNaNซึ่งก็คือ "เท็จ" ดังนั้นaจะถูกกำหนดให้0.สะอาดกว่าและเร็วกว่าการใช้คำสั่งประกอบไปด้วยสองอย่าง
Geoff James

4
@ Paul0515 คุณสามารถอัปเดตสิ่งนี้ให้เป็นคำตอบที่ถูกต้องได้
Chris Lang

94

สำหรับผู้ใช้งานเชิงมุมของเรา:

ภายในแม่แบบ , Number(x)และparseInt(x)โยนข้อผิดพลาดและ+xไม่มีผล หล่อที่ถูกต้องจะเป็นหรือx*1x/1


นั่นช่างวิเศษสุด ๆ! อย่างที่คุณพูดใน HTML + x จะไม่แปลงเป็นเลขเลย
sa_

3
นั่นเป็นเพราะNumberไม่ได้อยู่ในขอบเขตการประเมินผล คุณสามารถเขียนclass MyComponent { Number = Number; }เพื่อใช้งานได้
Aluan Haddad

58

ดังที่แสดงโดยคำตอบอื่น ๆ ที่นี่มีหลายวิธีในการแปลง:

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

ฉันอยากจะพูดถึงอีกอย่างหนึ่งในparseIntว่า

เมื่อใช้parseIntจะทำให้รู้สึกผ่านพารามิเตอร์ radixเสมอ 10สำหรับการแปลงทศนิยมที่เป็น นี่เป็นค่าดีฟอลต์สำหรับพารามิเตอร์ซึ่งเป็นสาเหตุที่สามารถละเว้นได้ สำหรับไบนารีมันคือ2และ16สำหรับเลขฐานสิบหก ที่จริงแล้ว Radix ใด ๆ ระหว่างและรวมถึง 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 5, การใช้งานหลายคนตีความสตริงตัวเลขเริ่มต้นด้วย 0 นำเป็นฐานแปด ต่อไปนี้อาจมีผลลัพธ์ฐานแปดหรืออาจมีผลลัพธ์ทศนิยม ระบุ radix เสมอเพื่อหลีกเลี่ยงพฤติกรรมที่ไม่น่าเชื่อถือนี้

- MDN

ความจริงที่ว่ารหัสได้ชัดเจนยิ่งขึ้นเป็นผลข้างเคียงที่ดีของการระบุพารามิเตอร์ radix

เนื่องจากparseFloatวิเคราะห์เฉพาะตัวเลขนิพจน์ใน radix 10 จึงไม่จำเป็นต้องใช้พารามิเตอร์ radix ที่นี่

เพิ่มเติมเกี่ยวกับเรื่องนี้:


และอีกหนึ่ง: ~~ '123' (ใช้ ToInt32 ภายใน)
aMarCruz

@aMarCruz จริง แต่ฉันอภิปรายว่านี้จะเป็นประโยชน์ในความหมาย
เคลอเออร์

52

การอธิบายเกี่ยวกับสิ่งที่ไรอันกล่าวไว้นั้น TypeScript รวบรวมสำนวนจาวาสคริปต์โดยทั่วไป

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 ประเภท Conversion


22

คุณสามารถทำตามวิธีใดวิธีหนึ่งต่อไปนี้

var str = '54';

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

13

การแปลงสตริงเป็นตัวเลข:

ใน typescript เราแปลงสตริงเป็นตัวเลขด้วยวิธีต่อไปนี้:

  • ParseInt(): ฟังก์ชั่นนี้ใช้เวลา 2 ข้อโต้แย้งข้อแรกคือการแยกสตริง ที่สองคือ radix (ฐานในระบบตัวเลขทางคณิตศาสตร์เช่น 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);

จะใช้อะไร

  1. ใช้ParseInt()เมื่อคุณต้องการสตริงแปลงเป็นจำนวนเต็ม แต่ประเภทข้อมูลยังคงลอยเนื่องจากทุกค่าตัวเลขจะลอยค่าจุดใน TS ใช้วิธีนี้เมื่อคุณต้องการระบุ radix ของจำนวนที่คุณต้องการแยกวิเคราะห์
  2. ใช้ParseFloat()เมื่อคุณต้องการที่จะแยกสตริงเป็นจำนวนจุดลอย
  3. คุณสามารถใช้+ประกอบการก่อนที่จะสายไปยังบีบบังคับให้มันกลายเป็นจำนวนจุดลอย ข้อดีของสิ่งนี้คือไวยากรณ์สั้นมาก

7

วิธีที่ง่ายที่สุดคือใช้ + strVal หรือ Number (strVal)

ตัวอย่าง:

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

เรียกใช้ฟังก์ชันด้วย => convertstring ('10 .00 ')

parseFloat (string) => มันสามารถใช้ในการแปลงเป็น float, toFixed (4) => เป็นทศนิยมเท่าใด

parseInt (str) => มันสามารถใช้ในการแปลงเป็นจำนวนเต็ม

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

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

เครื่องมือแปลงหมายเลขออนไลน์

แปลงจำนวน



0

มีหลายท่านที่มีปัญหาในการแปลงชนิดข้อมูลเป็นเรื่องยากที่จะแก้ไขในสถานการณ์การเขียนโปรแกรมไอออนิกเพราะภาษานี้ใหม่มากที่นี่ฉันจะอธิบายรายละเอียดคำแนะนำสำหรับผู้ใช้เพื่อทราบวิธีการแปลงข้อมูลชนิดไอออนิกเป็นข้อมูลสตริง จำนวนเต็มชนิด

ในภาษาการเขียนโปรแกรมเช่น java, php, c, c ++, ... ทุกคนสามารถย้ายข้อมูลได้อย่างง่ายดายจากนั้น ionic ยังสามารถสร้างการแปลงข้อมูลให้เราได้ซึ่งเป็นวิธีที่ง่ายไม่น้อยในภาษาโปรแกรมอื่น ๆ

this.mPosition = parseInt("");

0

หากคุณกำลังพูดถึงประเภทเพียงตามที่คนอื่นพูด parseInt () ฯลฯ จะกลับประเภทที่ถูกต้อง นอกจากนี้หากด้วยเหตุผลใดก็ตามค่าอาจเป็นได้ทั้งตัวเลขหรือสตริงและคุณไม่ต้องการเรียก parseInt () นิพจน์ typeof จะส่งไปยังประเภทที่ถูกต้องด้วย:

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

0

นี่คือฟังก์ชัน 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);    
   }


0

typescript ต้องรู้ว่าเราvar aจะอีเธอร์เป็นNumber || 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

คุณสามารถใช้ตัวเลือกการส่ง ก่อนอื่นคุณต้องแปลงวัตถุของคุณเป็นประเภท "ไม่ทราบ" จากนั้นจึงแปลงเป็นประเภทวัตถุที่คาดหวัง

let subID:number = 0;

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

TypeScript เท่านั้นมีคำใบ้ประเภทไม่มีการคัดเลือกประเภท มันหลอกผู้คอมไพเลอร์ให้คิดว่ามันเป็นตัวเลขตอนรันไทม์มันจะยังคงเป็นสตริงจนกว่าคุณจะแยกวิเคราะห์
k0pernikus

console.log(typeof <number><unknown>"1", typeof Number("1"))string numberจะพิมพ์
k0pernikus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.