我想知道是否可以修改此代码,以便将“4,5”和“4.5”(或任何只有十分位数的数字)分别渲染为4.50(或4,50)...而不是而不是45岁。
我想我需要首先测试“来源”,看它是否有格式“x [。,] x”(数字,逗号或句号,数字)但是无法成功完成。我尝试过使用“toFixed”,但如果它是4.500或其他东西(需要渲染为4500,而不是4.50!),这会让事情变得混乱。
非常感谢任何帮助。谢谢!
function parse(source) {
var sep = source.charAt(source.length - 3);
switch (sep) {
case '.':
case ',':
var parts = source.split(sep);
var norm = parts[0].replace(/(\.|,|\s)/g, '') + '.' + parts[1];
break;
default:
var norm = source.replace(/(\.|,|\s)/g, '');
}
return Math.round(Number(norm));
}
所以我找到了一个标识正确模式的正则表达式:/^ \ d {1} [。,] \ d {1} $ /(注意在括号内的句点之前没有出现斜杠! !)
我已将它添加到以下小函数中,我想简单地将其添加到零或将变量保留为原样。但由于某种原因,它现在正在我正在添加零点的部分崩溃......
function addZeros(number) {
var s = number;
if (s.match(/^\d{1}[\.,]\d{1}$/)) { //should only get here on "X,X" or "X.X" cases
alert(s); //makes it to here, displays only this alert
s = s.toFixed(2); //wtf is wrong with this?!!
alert(s); //does NOT make it to here.
return s;
}
else {
alert('All good in the hood.');
return s;
}
}
答案 0 :(得分:0)
如果我理解正确,应该这样做
function parse(s) {
var found = false;
['.', ','].forEach(function (el) {
var i = s.indexOf(el);
if (s[i] === s[s.length - 2]) {
s = s + '0';
found = true;
return false;
}
});
if (!found) {
return s.replace(/(\.|,|\s)/g, '');
} else {
return s;
}
}
在每个分隔符上运行forEach
,并确定如何格式化它。
答案 1 :(得分:0)
这样做你想要的吗?
function parse(source) {
var dotIndex = source.lastIndexOf('.');
var commaIndex = source.lastIndexOf(',');
var numDots = source.match(/\./g).length;
if (dotIndex > commaIndex && numDots == 1) {
// Dot-delimited decimal
return Number(source.replace(/,/g, '')).toFixed(2);
} else {
return Number(source.replace(/\./g, '').replace(/,/g, '.')).toFixed(2);
}
}
> parse("1,200,300.20")
"1200300.20"
> parse("1.200.300,20")
"1200300.20"
> parse("1.200.300")
"1200300.00"