如何在JavaScript中舍入十进制数

时间:2019-03-28 00:03:58

标签: javascript rounding floor

我有这个十进制数字:1.12346

我现在只想保留小数点后4位,但我想四舍五入,以便返回1.1234。现在返回:1.1235,这是错误的。

有效。我想要最后两个数字:“ 46”会四舍五入为“ 4”,而不是四舍五入

这怎么可能?

    var nums = 1.12346;
    nums = MathRound(nums, 4);
    console.log(nums);

function MathRound(num, nrdecimals) {
    return num.toFixed(nrdecimals);
}

5 个答案:

答案 0 :(得分:1)

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

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}`;

当然,如果您不是出于演示目的而这样做,那么应该回答“为什么您认为需要这样做”这个问题(因为它会使随后涉及该数字的数学无效)首先,因为帮助您做错事实际上并没有帮助,而是使情况变得更糟。

答案 1 :(得分:1)

这是与How to round down number 2 decimal places?相同的问题。您只需要对其他小数位进行调整即可。

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));

答案 2 :(得分:1)

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

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;
}

答案 3 :(得分:0)

var nums = 1.12346;
var dec = 10E3;
var intnums = Math.floor(nums * dec);
var trim = intnums / dec;
console.log(trim);

答案 4 :(得分:0)

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