簡體   English   中英

Javascript將字符串轉換為整數

[英]Javascript convert string to integer

我只是把我的腳趾浸入混亂的javascript世界,更多的是出於必要而不是欲望,我遇到了添加兩個整數的問題。

1,700.00 + 500.00

返回1,700.00500.00

因此經過一些研究后我發現1,700.00被視為一個字符串,我需要轉換它。

我閱讀以解決此問題的最相關的頁面是這個問題這個頁面 但是當我使用時

parseInt(string, radix)

它返回1.我使用了錯誤的函數或錯誤的基數(說實話,我無法理解我如何決定使用哪個基數)。

var a="1,700.00";
var b=500.00;
parseInt(a, 10); 

嘗試這個 :

parseFloat(a.replace(/,/g, ''));

它也適用於: 1,800,300.33

示例:

parseFloat('1,700,800.010'.replace(/,/g, '')) // 1700800.01

基本答案

parseInt無法正常工作的原因是逗號。 您可以使用正則表達式刪除逗號,例如:

var num = '1,700.00';

num = num.replace(/\,/g,'');

這將返回一個帶有數字的字符串。 現在你可以解析了。 如果你沒有選擇基數,它將默認為10 ,這是在這里使用的正確值。

num = parseInt(num);

在添加它們之前為每個字符串編號執行此操作,一切都應該有效。

更多信息

替換如何工作:

有關mdn替換的更多信息:

`/` - start  
`\,` - escaped comma  
`/` - end  
`g` - search globally

全局搜索將查找所有匹配(如果沒有此匹配,它將在第一次匹配后停止)
''用空字符串替換匹配的部分,基本上刪除它們。

常用表達

  • :一個偉大的工具來測試正則表達式Rubular在和更多關於他們MDN
  • 如果你正在尋找一個很好的教程這里是一個

ParseInt和Rounding,parseFloat

parseInt總是舍入到最接近的整數。 如果你需要小數位,你可以使用幾個技巧。 這是我最喜歡的:

2 places: `num = parseInt(num * 100) / 100;`
3 places: `num = parseInt(num * 1000) / 1000;`

有關parseInt的更多信息,請查看mdn

如果你不想舍入,也可以使用parseFloat。 我假設你做了,因為標題被轉換為整數。 一個很好的例子是由@ fr0zenFry在下面寫的。 他指出parseFloat也沒有采用基數,所以它始終在base10中。 有關更多信息,請參閱mdn

嘗試使用replace()替換a , nothing ,然后使用parseFloat()將數字替換為float。 從OP中的變量看來,似乎也可能存在小數,因此,在這種情況下, parseInt()可能無法正常工作(十進制后的數字將被剝離)。

使用表達式中replace()擺脫每次出現的,

var a = parseFloat('1,700.00'.replace(/,/g, '')); 
var b = parseFloat('500.00'.replace(/,/g, ''));
var sum = a+b;

即使你的數字是1,700.55分數,這也應該給你正確的結果。

如果我按你的問題的標題,你需要一個整數。 為此,您可以使用parseInt(string, radix) 它沒有radix但是指定它總是一個好主意,因為你永遠不知道瀏覽器的行為方式(例如,請參閱注釋@Royi Namir)。 此函數將字符串舍入為最接近的整數值。

var a = parseInt('1,700.00'.replace(/,/g, ''), 10);   //radix 10 will return base10 value
var b = parseInt('500.00'.replace(/,/g, ''), 10);
var sum = a+b;

請注意, parseFloat()不需要基數,它將始終返回decimal / base10值。 此外,將將在后小數點末端剝去任何額外的零(例如: 17500.50變得17500.517500.00變為17500 )。 如果您需要始終獲得2位小數,請將另一個函數附加到固定toFixed(decimal places)

var a = parseFloat('1,700.00'.replace(/,/g, '')); 
var b = parseFloat('500.00'.replace(/,/g, ''));   
var sum = (a+b).toFixed(2);    //change argument in toFixed() as you need
// 2200.00

另一種替代方法是@EpiphanyMachine,它需要你乘以然后將每個值除以100 如果您希望將來更改小數位,則可能會出現問題,您必須更改每個變量的乘法/除法因子。 使用toFixed() ,您只需更改參數即可。 但請記住,與@EpiphanyMachine解決方案不同, toFixed()會將數字更改回字符串 所以你將成為自己的判斷者。

Javascript不懂逗號。 像這樣刪除它:

a.replace(',', '')

一旦你擺脫了逗號,應該解析字符串沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM