我正在尝试对“200.32 M”或“800.80 B”
等值进行排序我正在使用的当前方法无法解决。有谁熟悉这个?
ts.addParser({
id: 'mktcap',
is: function(s) {
return false;
},
format: function(s) {
return s.replace(/M/,s+1000000).replace(/B/,s+1000000000);
},
type: "numeric"
});
答案 0 :(得分:0)
s.replace(/M/,s+1000000)
看起来很奇怪
请尝试使用此M
(B
等相同。)
var s = "200.32 M";
s = eval(s.replace(/ M/, " * 1000000"));
// s = 200320000
var s = "800.80 B";
s = eval(s.replace(/ B/, " * 1000000000"));
// s = 800800000000
答案 1 :(得分:0)
我确信s.replace(/M/,s+1000000)
不会做你期望的事。最好的情况是,你最终会得到一个像“200.32 1000200.32”这样的字符串。我会检查M,将其剥离,将字符串转换为数字,然后添加/乘以适当的值。像这样......
var str = "200.32 M";
var tokenM = " M";
var num;
if(str.indexOf(tokenM) == (str.length - tokenM.length)) { // Ends with " M"?
str = str.replace(new RegExp(tokenM), "");
num = parseFloat(str) + 1000000;
}
答案 2 :(得分:0)
var s= "200.32 M" ;
var rx=/((\.\d+)|(\d+(\.\d+)?))\s*([MB])?/;
var P= rx.exec(s), value, x,
mult={M:1000000,B:1000000000,O:1};
if(P){
value= P[1];
x=P[5] || O;
value*=mult[x];
}
alert(value)
/ *返回值:(Number) 200320000 * /