为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JavaScript中四舍五入十进制数

如何在JavaScript中四舍五入十进制数

我有这个十进制数字:1.12346我现在只想保留4位小数,但我想四舍五入,以便返回:1.1234。现在返回:1.1235这是错误的。有效。我想要最后两个数字:“ 46”会四舍五入为“ 4”,而不是四舍五入为“ 5”这怎么可能呢?    var nums = 1.12346;    nums = MathRound(nums, 4);    console.log(nums);function MathRound(num, nrdecimals) {    return num.toFixed(nrdecimals);}
查看完整描述

4 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

如果您是因为需要打印/显示一个值而这样做,那么我们就不必停留在数字领域:将其转换为字符串,然后将其切碎:


let nums = 1.12346;


// take advantage of the fact that

// bit operations cause 32 bit integer conversion

let intPart = (nums|0); 


// then get a number that is _always_ 0.something:

let fraction = nums - intPart ;


// and just cut that off at the known distance.

let chopped = `${fraction}`.substring(2,6);


// then put the integer part back in front.

let finalString = `${intpart}.${chopped}`;

当然,如果您不是为了演示而这样做,则可能应该首先回答“为什么您认为需要这样做”(因为它会使涉及该数字的后续数学无效)的问题就应该首先回答,因为帮助您做错了事是并没有真正的帮助,反而使情况变得更糟。


查看完整回答
反对 回复 2021-04-08
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这是与如何舍入小数点后两位数字相同的问题?。您只需要对其他小数位进行调整。

Math.floor(1.12346 * 10000) / 10000


console.log(Math.floor(1.12346 * 10000) / 10000);

如果希望将此作为可重用的函数,则可以执行以下操作:


function MathRound (number, digits) {

  var adjust = Math.pow(10, digits); // or 10 ** digits if you don't need to target IE

  return Math.floor(number * adjust) / adjust;

}


console.log(MathRound(1.12346, 4));


查看完整回答
反对 回复 2021-04-08
?
富国沪深

TA贡献1790条经验 获得超9个赞

我认为这可以解决问题。从本质上纠正上舍入。


var nums = 1.12346;

    nums = MathRound(nums, 4);

    console.log(nums);


function MathRound(num, nrdecimals) {

    let n = num.toFixed(nrdecimals);

    return (n > num) ? n-(1/(Math.pow(10,nrdecimals))) : n;

}


查看完整回答
反对 回复 2021-04-08
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

var num = 1.2323232;

converted_num = num.toFixed(2);  //upto 2 precision points

o/p : "1.23"


To get the float num : 

converted_num = parseFloat(num.toFixed(2));

o/p : 1.23


查看完整回答
反对 回复 2021-04-08
  • 4 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信