如何四舍五入,如果值是两个小数和格式为3个小数在javascript

how to round up if value is two decimal and format as 3 decimals in javascript?

本文关键字:小数 两个 格式 javascript 3个 四舍五入 如果      更新时间:2023-09-26

测试案例:

var num1 = 10.66;
var num2 = 10.7898

我在stackOverFlow上找到的函数:

function formatUserCurrencyValue(fieldValue){
    var num = parseFloat(fieldValue);
    var str = num.toFixed(10);
    str = str.substring(0, str.length-7);
    return str;
};

我希望结果是这样的:如果10.6610.670,如果10.7899810.789。基本上,如果值有2位小数,那么结果应该四舍五入,然后格式化为3位小数。如果超过2位小数(例如:10.78998)然后是10.789,在3位小数之后修剪值。

谁能告诉我怎么才能做到这一点?我尝试了上述函数以及我发现的其他一些函数,但结果不是我对10.66场景的期望。我得到10.660而不是10.670

看起来这里已经有人问过类似的问题:在JavaScript中使用恰好两个小数格式化数字

我喜欢@Miguel的答案。使用函数进行转换。

 function precise_round(num, decimals) {
var t=Math.pow(10, decimals);   
 return (Math.round((num * t) + (decimals>0?1:0)*(Math.sign(num) * (10 / Math.pow(100, decimals)))) / t).toFixed(decimals);
    }

则使用函数。precise_round (num, 3)

抛开num1四舍五入将产生10.66而不是10.67这一事实,可以使用下面的函数来实现,该函数将把适当的结果打印到控制台。

var num1 = 10.66;
var num2 = 10.7898;
var roundIt = function(num) {
    console.log(parseFloat(Math.round(num * 1000) / 1000).toFixed(3));
};
roundIt(num2); //10.790
roundIt(num1); //10.660

由于使用toFixed()方法返回一个字符串,因此我们将结果包装在parseFloat()中,因此我们得到一个浮点数

这就是你想要的,我觉得很奇怪。像这样的圆是很"特别"的。至少……但是,这正是你想要的。

var weirdRound = function(n) {
  var splited = n.toString().split(".");
  var res = 0;
  if(splited[1]) {
    var len = splited[1].length;
    if(len > 3) {
      splited[1] = splited[1].substr(0, 3);
      res = (splited.join(".") *1).toFixed(3);
    } else if(len == 2) {
      splited[1] = splited[1].substr(0, 1) + ((splited[1].substr(len -1, len) *1) +1);
      res = (splited.join(".") *1).toFixed(3);
    } else if(len == 1) {
      res = n.toFixed(2)
    } else {
      res = n.toFixed(3);
    }
  }
  return res.toFixed(3);
}
console.log(weirdRound(10.66));
console.log(weirdRound(10.9));
console.log(weirdRound(10.7898));
console.log(weirdRound(1.12));
console.log(weirdRound(1.12565));
console.log(weirdRound(1.125));