【问题标题】:Number formatting with toFixed() and toLocaleString()使用 toFixed() 和 toLocaleString() 格式化数字
【发布时间】:2019-12-21 17:10:25
【问题描述】:

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

我有 3 种不同的情况:
1)第一种情况:当我的数字是负数时,我必须在它周围加上括号,并显示它的绝对值。问题是,我必须在逗号后保留 1 位数字,即使对于像(218、9744 等...)这样的“圆形”数字也是如此。
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"));
}

【问题讨论】:

  • “我面临的问题似乎是使用 parseFloat() 来删除尾随零。” parseFloat 不会删除尾随零。它从字符串转换为数字。标准数字类型没有尾随零的概念,这是一个与字符串相关的概念,而不是数字。
  • 猜你可能需要numeraljs 之类的东西,如果你正在使用基于 React 的网站,react-number-format 也是一个不错的选择
  • @keikai 此代码在后端运行抱歉我没有提到...

标签: node.js formatting parsefloat


【解决方案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)}
`);

【讨论】:

  • 谢谢!这解决了我的问题!我刚刚修改了您的代码以添加var x, x1, x2, rgx 否则无法编译!
猜你喜欢
  • 2014-02-27
  • 2015-10-13
  • 1970-01-01
  • 2018-09-21
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多