Làm cách nào để chuyển đổi một chuỗi thành số trong TypeScript?


876

Đưa ra một đại diện chuỗi của một số, làm thế nào tôi có thể chuyển đổi nó thành numbergõ trong TypeScript?

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


2
@o_nix Nó lừa trình biên dịch, nó không thay đổi loại loại: console.log(typeof <number><any>"1", typeof Number("1"))sẽ in string number.
k0pernikus

Câu trả lời:


1383

Giống hệt như trong JavaScript , bạn có thể sử dụng parseInthoặc parseFloatchức năng, hay đơn giản là sử dụng unary +nhà điều hành:

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

Tất cả các kỹ thuật được đề cập sẽ có cách gõ chính xác và sẽ phân tích chính xác các chuỗi số nguyên thập phân đơn giản như thế "123", nhưng sẽ hành xử khác nhau đối với các trường hợp khác, có thể được dự kiến, (như "123.45") và các trường hợp góc (như null).

Bảng chuyển đổi Bảng lấy từ câu trả lời này


237
gợi ý nhỏ: parseInt (null) trả về NaN nhưng + null trả về 0
Robin J

17
Không biểu cảm như câu trả lời được đánh giá cao hơn của Philip ở đây thực hiện theo cách TypeScript.
Patrick

10
Không có cách TypeScript vì TypeScript chỉ là JavaScript.
thedayturns

47
@thedayturns không có cách lập trình nào vì lập trình chỉ là điện
jiroch

1
@Patrick không chắc tại sao bạn gọi đó là cách "TypeScript" vì nó cũng chỉ là Javascript đơn giản ...
Sandy Gifford

1092

Cách thức để thực hiện việc này sẽ là:

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

như đã trả lời ở đây: https://stackoverflow.com/a/23440948/2083492


4
Lưu ý: bạn có thể kiểm tra NaN bằng isNaNchức năng.
Heinrich Ulbricht

2
Lưu ý rằng điều này sẽ không hoạt động: let value: number = valueAsString;
yonexbat

1
Tôi nghĩ Số mới ("1234"). ValueOf () thực sự là thứ mà tất cả chúng ta đang tìm kiếm-
chrismarx

23
@Devid - bạn có thể đơn giản hóa let a = Number('x') || 0;- Number('x')sẽ trở lại NaN, đó là "falsey". Do đó, asẽ được chỉ định 0.Sạch sẽ hơn nhiều và nhanh hơn (hơi) so với sử dụng câu lệnh ternary và phân tích cú pháp hai lần.
Geoff James

4
@ Paul0515 bạn có thể cập nhật đây là câu trả lời đúng không
Chris Lang

94

Đối với người dùng Angular đồng nghiệp của chúng tôi:

Trong vòng một mẫu , Number(x)parseInt(x)ném một lỗi, và +xkhông có tác dụng. Đúc hợp lệ sẽ được x*1hoặc x/1.


điều đó thật tuyệt vời! như bạn đã nói trong HTML + x hoàn toàn không chuyển đổi thành số
sa_

3
Đó là bởi vì Numberkhông nằm trong phạm vi đánh giá. Bạn có thể viết class MyComponent { Number = Number; }để sử dụng nó.
Aluan Haddad

58

Như được hiển thị bởi các câu trả lời khác ở đây, có nhiều cách để thực hiện chuyển đổi:

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

Tôi muốn đề cập đến một điều nữa parseIntmặc dù.

Khi sử dụng parseInt, nó luôn có ý nghĩa để luôn vượt qua tham số cơ số . Đối với chuyển đổi thập phân, đó là 10. Đây là giá trị mặc định cho tham số, đó là lý do tại sao nó có thể được bỏ qua. Đối với nhị phân, nó là một 216cho hệ thập lục phân. Trên thực tế, bất kỳ cơ số giữa và bao gồm 2 và 36 hoạt động.

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

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

Các parseIntchức năng, tốt, phân tích chuỗi để chuyển đổi chúng sang số. Trong một số triển khai JS, parseIntphân tích các số 0 đứng đầu dưới dạng bát phân:

Mặc dù không được khuyến khích bởi ECMAScript 3 và bị cấm bởi ECMAScript 5, nhiều triển khai diễn giải một chuỗi số bắt đầu bằng số 0 đứng đầu là bát phân. Sau đây có thể có kết quả bát phân, hoặc nó có thể có kết quả thập phân. Luôn chỉ định một cơ số để tránh hành vi không đáng tin cậy này.

- MDN

Thực tế là mã trở nên rõ ràng hơn là một hiệu ứng phụ tuyệt vời của việc chỉ định tham số cơ số.

parseFloatchỉ phân tích các biểu thức số trong cơ số 10, nên không cần tham số cơ số ở đây.

Thêm về điều này:


và một cái nữa: ~ ~ '123' (sử dụng ToInt32 nội bộ)
aMarCruz

@aMarCruz đúng, nhưng tôi sẽ tranh luận nếu điều này hữu ích về mặt ngữ nghĩa
Fabian Lauer

52

Đáng kinh ngạc về những gì Ryan nói, TypeScript bao hàm các thành ngữ JavaScript nói chung.

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

Tất cả các chi tiết chuyên sâu thú vị tại Chuyển đổi loại JavaScript .


22

Bạn có thể làm theo một trong những cách sau.

var str = '54';

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

13

Chuyển đổi chuỗi thành số:

Trong Bản in, chúng tôi chuyển đổi một chuỗi thành một số theo các cách sau:

  • ParseInt(): Hàm này có 2 đối số, đầu tiên là một chuỗi để phân tích cú pháp. Thứ hai là cơ số (cơ sở trong các hệ thống số toán học, ví dụ 10 cho số thập phân và 2 cho số nhị phân). Sau đó, nó trả về số nguyên, nếu ký tự đầu tiên không thể được chuyển đổi thành một số, NaNsẽ được trả về.
  • ParseFloat(): Lấy làm đối số giá trị mà chúng tôi muốn phân tích và trả về số dấu phẩy động. Nếu giá trị không thể được chuyển đổi thành một số, NaNđược trả lại.
  • + Toán tử: Toán tử khi được sử dụng một cách thích hợp có thể ép giá trị chuỗi thành một số.

Ví dụ:

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

Dùng loại nào?

  1. Sử dụng ParseInt()khi bạn muốn một chuỗi được chuyển đổi thành một số nguyên . Tuy nhiên, kiểu dữ liệu vẫn là số float, vì tất cả các giá trị số là giá trị dấu phẩy động trong TS . Cũng sử dụng phương pháp này khi bạn cần chỉ định cơ số của số bạn muốn phân tích.
  2. Sử dụng ParseFloat()khi bạn cần phân tích một chuỗi thành một số dấu phẩy động .
  3. Bạn có thể sử dụng +toán tử trước một chuỗi để ép buộc nó thành một số dấu phẩy động . Ưu điểm của việc này là cú pháp rất ngắn.

7

Cách dễ nhất là sử dụng + strVal hoặc Number (strVal)

Ví dụ:

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

Có các hàm sẵn có như parseInt(), parseFloat()Number()trong Bản in, bạn có thể sử dụng các hàm đó.


2

Gọi hàm với => convertopes ('10 .00 ')

parseFloat (chuỗi) => Nó có thể được sử dụng để chuyển đổi thành float, toFixed (4) => thành bao nhiêu số thập phân

parseInt (str) => Nó có thể được sử dụng để chuyển đổi thành số nguyên

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


1

Có ba cách

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

0

Có rất nhiều bạn đang gặp vấn đề khi chuyển đổi các loại dữ liệu rất khó giải quyết trong các tình huống lập trình ion, bởi vì chính ngôn ngữ này là mới, ở đây tôi sẽ hướng dẫn chi tiết cho người dùng biết cách chuyển đổi các loại ion dữ liệu thành chuỗi dữ liệu gõ số nguyên.

Trong các ngôn ngữ lập trình như java, php, c, c ++, ... tất cả đều có thể di chuyển dữ liệu dễ dàng, sau đó trong ion cũng có thể tạo cho chúng tôi chuyển đổi dữ liệu cũng là một cách dễ dàng không kém các ngôn ngữ lập trình khác.

this.mPosition = parseInt("");

0

nếu bạn đang nói về chỉ các loại, như những người khác đã nói, parseInt (), v.v. sẽ trả về đúng loại. Ngoài ra, nếu vì bất kỳ lý do nào, giá trị có thể là cả một số hoặc một chuỗi và bạn không muốn gọi parseInt (), các biểu thức typeof cũng sẽ chuyển sang đúng loại:

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

0

Đây là phiên bản sửa đổi của hàm StrToNumber. Như trước,

  1. Nó cho phép một dấu hiệu tùy chọn xuất hiện ở phía trước hoặc phía sau giá trị số.
  2. Nó thực hiện kiểm tra để xác minh chỉ có một dấu hiệu ở đầu hoặc đuôi của chuỗi.
  3. Nếu xảy ra lỗi, giá trị mặc định "đã qua" được trả về.

Câu trả lời này là một giải pháp khả thi phù hợp hơn với câu hỏi ban đầu so với bài viết trước của tôi.

   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

bản thảo cần biết rằng chúng ta var asẽ đến etherNumber || 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

Bạn luôn có thể sử dụng tùy chọn diễn viên. Trước tiên, bạn phải chuyển đổi đối tượng của mình thành loại "không xác định" và sau đó chuyển nó thành loại đối tượng dự kiến.

let subID:number = 0;

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

TypeScript chỉ có gợi ý kiểu, không có kiểu truyền. Nó lừa trình biên dịch nghĩ rằng đó là một số, trong thời gian chạy, nó vẫn sẽ là một chuỗi trừ khi bạn phân tích cú pháp.
k0pernikus

console.log(typeof <number><unknown>"1", typeof Number("1"))sẽ in string number.
k0pernikus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.