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+
。