在Javascript中舍入到最小2位小数和最多4位小数

时间:2016-11-28 17:34:21

标签: javascript jquery rounding

有没有办法将数字舍入到最小2位小数我javascript。

示例:

  1. 10 - > 10.00
  2. 20.10 - > 20.10
  3. 30.1234 - > 30.1234
  4. 40.123456 - > 40.1235
  5. 50.1200 - > 50.12
  6. 60.123 - > 60.123
  7. 等等......所以舍入到最小2位小数。我可以使用jquery。

4 个答案:

答案 0 :(得分:5)

如果您不限于过时的浏览器,我建议使用此智能功能:



var fmtr = new Intl.NumberFormat('us-us', {
  style: 'decimal',
  useGrouping: false,
  minimumFractionDigits: 2,
  maximumFractionDigits: 4
});

function test(test) {
  var result = fmtr.format(test.num);
  console.log(
    test.num,
    "=>",
    result,
    result == test.result ? "- Pass" : "- Fail"
  );
}

[
    {num: 10, result:  "10.00"},
    {num: 20.10, result:  "20.10"},
    {num: 30.1234, result:  "30.1234"},
    {num: 40.123456, result:  "40.1235"},
    {num: 50.1200, result:  "50.12"},
    {num: 60.123, result:  "60.123"}
].forEach(test);




参考文献:

答案 1 :(得分:3)

听起来就像你说你想把数字变成至少有两个小数位的字符串(即使它们是零),如果有必要,最多可以变成四个(它们不是零) )。如果是这样的话:

适用于所有现代浏览器:See Marek's answer

如果您不能依赖Intl:我唯一能想到的就是使用toFixed(4)然后最多删除两个尾随零:

function format(num) {
  var str = num.toFixed(4);
  return str.replace(/0{1,2}$/, '');
}
function test(test) {
  var result = format(test.num);
  console.log(
    test.num,
    "=>",
    result,
    result == test.result ? "- Pass" : "- Fail"
  );
}

[
    {num: 10, result:  "10.00"},
    {num: 20.10, result:  "20.10"},
    {num: 30.1234, result:  "30.1234"},
    {num: 40.123456, result:  "40.1235"},
    {num: 50.1200, result:  "50.12"},
    {num: 60.123, result:  "60.123"}
].forEach(test);

答案 2 :(得分:1)

查看toFixed()javascript函数:here

它会将其保留为字符串,但这可能会导致问题,具体取决于您正在做什么

答案 3 :(得分:0)

所选解决方案仅适用于4位小数。不超过5。如果您只能使用过时的浏览器,则下面的功能强大的代码将删除所有的尾随零,然后在没有零的情况下添加2个零。

function format(n) {

  let r = (+n).toFixed(10); // or any

  if (r.match(/\./)) {
      r = r.replace(/\.?0+$/, '');
  }

  const s = r.toString();

  if (s.indexOf('.') === -1) {
      r = Number.parseFloat(r).toFixed(2);
  }

  return r;
}

我需要这样的东西,但是可以使用任意数量的小数,并且不仅限于过时的浏览器。

这是尚未提出的可能的解决方案之一,我发布了它,希望有人可以评论如何将其简化为仅用于正则表达式。谢谢!