使用toFixed()和toLocaleString()进行数字格式化

时间:2019-12-21 17:10:25

标签: node.js formatting parsefloat

我需要以给定的方式为我的网站设置数字格式。
这是我的问题:

我有3种不同的情况:
1)第一种情况:当我的数字为负数时,必须在其周围加上括号并显示其绝对值。问题是,即使对于“舍入”数字,例如(218、9744等),我也必须保留逗号后的1位数字。
2)第二种情况:当我的数字等于零时,我必须返回0.0 [这个可以了]
3)第三种情况:当我的电话号码为正数时,我必须用逗号后面的一位数字将其返回。

为了简单起见,我必须使用toLocaleString()函数将其格式化为en-EN
我面临的问题似乎是使用parseFloat()来删除尾随零。有人能帮我吗 ?

以下是一些我需要的示例:

218 -> 218.0
21800 -> 21,800.0
-21800 -> (21,800.0)

我的代码:

if (number < 0) {
    return ('(' + Math.abs(floatNumber.toFixed(1)).toLocaleString("en-EN") + ')');
}
else if (number == 0.0) {
    return (floatNumber.toFixed(1))
}
else {
    return (parseFloat(floatNumber.toFixed(1)).toLocaleString("en-EN"));
}

1 个答案:

答案 0 :(得分:1)

您应该可以执行以下操作:

function formatNumber(n) {
  return n < 0 
    ? `(${addCommas(Math.abs(n).toFixed(1))})` 
    : addCommas(n.toFixed(1));
}

function addCommas(n) {
  let x, x1, x2, rgx;
  n = String(n), x = n.split('.'), x1 = x[0], x2 = x.length > 1 ? '.' + x[1] : '', rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) x1 = x1.replace(rgx, '$1' + ',' + '$2');
  return x1 + x2;
}

console.log(`
Desired Results:
 218    => 218.0
 21800  => 21,800.0
 -21800 => (21,800.0)

Actual Results:
 218    => ${formatNumber(218)}
 21800  => ${formatNumber(21800)}
 -21800 => ${formatNumber(-21800)}
`);