Javascript 将字符串化的数字转换回数字

Javascript 将字符串化的数字转换回数字,javascript,Javascript,我有一些被严格化的数字,比如[“840.711亿美元”,“526.138亿美元”,“435.5亿美元”,“5473万美元]。我想将这些数字转换回:[“84071100000”、“52613800000”、“435500000”、“54730000”] let numb=[“840.711亿美元”、“526.138亿美元”、“435.5亿美元”、“5473万美元”] 常数res=[] for(设i=0;i

我有一些被严格化的数字,比如
[“840.711亿美元”,“526.138亿美元”,“435.5亿美元”,“5473万美元]
。我想将这些数字转换回:
[“84071100000”、“52613800000”、“435500000”、“54730000”]

let numb=[“840.711亿美元”、“526.138亿美元”、“435.5亿美元”、“5473万美元”]
常数res=[]
for(设i=0;i}
您还需要取点和点后的小数,然后乘以值并将结果分配给数字

然后,您可以搜索想要的因子,并获取一个用于乘法的默认值

函数转换(字符串){
var因子={000000:1e6,000000:1e9},
value=string.match(/\d+\.?\d*/g),
factor=string.match(新的RegExp(Object.keys(factors.join)(“|”),“i”);
返回值(值| | 0)*(因子[因子]| | 1);
}
var字符串=[“840.711亿美元”,“526.138亿美元”,“435.5亿美元”,“5473万美元],
结果=strings.map(转换);
console.log(结果);//[84071100000、52613800000、4355000000、54730000]
使用
replace()

替换(/[^\d.]/g',)
-删除除数字和点以外的所有内容

+numb
-一元加号将字符串转换为数字

let numb=[“840.711亿美元”、“526.138亿美元”、“435.5亿美元”、“5473万美元”]
常数res=[]
for(设i=0;i}
事实上,你已经非常接近了,但有几个小问题:

  • 正则表达式
    /\d+/g
    将使您失败,因为它只查找数字,但您还将
    用作十进制分隔符。因此,您需要在模式-
    /\d+(?:\。\d+)/g
    中对其进行说明-它是任意数量的数字,可以选择后跟文字点,然后再加任意数量的数字。
    • 正则表达式结果将为您提供一个包含所有匹配项的数组。您只需要号码,因此可以通过执行
      [0]
    • 如果(numb.match('billion')数字+100000000,您实际上想要乘法,而不是加法。因为
      121000
      1.21*1000=1210
      不是
      1.21+1000=1001.21
    • 您需要将该值分配回
      数字
      -
      数字*100000000
      将执行该操作,但随后将放弃结果-如果执行
      数字=数字*100000000
      ,则将保存该结果。您还可以将其写成
      位*=100000000
      ——将该值乘以并重新分配
    • 使用
      包含,而不是
      匹配
      。它的使用稍微简单一点-它将检查字符串是否具有您想要的值,而
      匹配
      将尝试对正则表达式运行它,如果您有(
      或括号),这就有点不可预测了
let numb=[“840.711亿美元”、“526.138亿美元”、“435.5亿美元”、“5473万美元”]
常数res=[]
for(设i=0;i}
您可以使用单个正则表达式

let numb=[“840.711亿美元”、“526.138亿美元”、“435.5亿美元”、“5473万美元”]
常量转换={
十亿:一百万,,
百万:一百万
};
函数转换(条目){
返回条目。替换(/^\$?(\S+)\S+(\w+)/g,(a,n,e)=>{
返回编号(n)*转换[e];
})
}

console.log(convert(numb[0]))
如果您知道它只有数字而没有空格,则可以使用
\S+
而不是
\d+\.?\d+