我有这个代码在Chart.JS条形图中添加一个值以上的值:
//ctx.fillText(addCommas(dataset.data[i]), model.x, y_pos);
ctx.fillText(addCommasRound(dataset.data[i]), model.x, y_pos);
旧代码(使用addCommas())有效,将“1838204.79”等值更改为“1,838,204.79”
我想忽略分数/小数,所以我尝试了另一种类似的addCommasRound()方法:
function addCommasRound(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return Math.round(x1 + x2);
}
addCommas()和addCommasRound()之间的唯一区别是将MathRound()插入到return语句中。为什么这会导致值为“NaN”而不是“1,838,205”?
我也尝试将最后一行更改为:
return Math.round(x1);
...只是为了看它是否会失败,但结果相同(“NaN”)。
答案 0 :(得分:2)
由于x1
和x2
不是数字(这是NaN代表的数字),因此它们是字符串。
您需要先对数字进行舍入,然后执行字符串操作。
function addCommasRound(nStr) {
nStr = String(Math.round(Number(nStr)));
答案 1 :(得分:2)
数字文字中不允许使用逗号。 Math.round
尝试将参数转换为数字。
执行+'1,000'
会产生NaN
,而+'1000'
会产生1000
。
如果您要为您要返回的号码添加逗号,请先轮回,然后然后添加逗号。
答案 2 :(得分:-1)
根据OrangeDog的回答,我提出了这个工作推导:
function addCommasRound(nStr) {
nStr = String(Math.round(Number(nStr)));
x = nStr.split('.');
x1 = x[0];
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1;
}