javascript - 为什么我在尝试舍入时得到 NaN (javascript)?

标签 javascript math rounding

我有这段代码可以在 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”)。

最佳答案

数字文字中不允许使用逗号。 Math.round 尝试将参数转换为数字。

执行 +'1,000' 会产生 NaN,而 +'1000' 会产生 1000

如果您想在返回的数字中添加逗号,请先四舍五入,然后然后添加逗号。

关于javascript - 为什么我在尝试舍入时得到 NaN (javascript)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39857514/

相关文章:

javascript - 使用 Shiny.onInputChange

javascript - JQuery 点击显示保存按钮

javascript - 根据屏幕大小调整大小?

c++ - 计算结果出现奇怪的错误

java - 如何通过仅替换一位数字来继续查找 2 个整数的最大总和?

mysql - 如何使用 MySql 查询将数据库中的数字四舍五入到小数点后两位

c# - 使用 C# 舍入到上面的单位

javascript - 我如何实现这个水平动态标题的垂直版本?

math - 为空间域中的给定掩码在频域中找到等效的高斯滤波器掩码

java - BigDecimal 1.0E+8/100000000 ROUND_HALF_UP 为 0