四舍五入在JavaScript中的十进制的最近的百分(Rounding to the nearest

2019-08-17 01:41发布

我使用的变量来表示数字做在JavaScript中简单的数学。 下面是我的代码示例:

var ones = 0;
var fives = 0;
function results (){
    _fives = (fives * 5);
    var res = (_fives + ones);
    document.innerHTML = res;
}

这是不完整的代码,但基本上我有用户从1枚美分硬币进入钞票和硬币的金额高达$ 100美元的账单。 该代码乘以钞票数量的法案是值得的量。 这是没有问题的工作就好了... ...关于我的一些成果由于某些原因,它显示了像1.899999999997不知道这是怎么发生的小数。

有没有办法改变这种做法,这一轮为十进制的百分位?

例如,而不是它显示1.89999999997它只是表明在现实中1.90,这不是一个大问题。 这是我可以圆我自己但是这将是很好的学习如何为将来的参考做个人的事情。

Answer 1:

UPDATE:MDN实际上有一个避免浮点不精确小数四舍五入的很好的例子 。 他们的方法可以进行修改,以始终围捕的基础上,OP。


ORIGINAL(有点不正确的)答案

//to round to n decimal places
function round(num, places) {
    var multiplier = Math.pow(10, places);
    return Math.round(num * multiplier) / multiplier;
}

编辑 :我并没有完全阅读问题。 既然我们谈到货币,我们可能要舍起来:

//to round up to two decimal places
function money_round(num) {
    return Math.ceil(num * 100) / 100;
}


Answer 2:

其实这个方法不起作用于所有情况。 我在做类似的测量值四舍五入到特定位数的东西。

在我来说,我有AA均值和测量的标准偏差,像0.20812345967 +/- 0.0031647859。 现在很明显的额外显著位数是无意义的,所以我想将它写为0.208 +/- 0.003。 当我做了浮点运算,我得到0.20800000000000002 +/- 0.003

通常这轮正确的,但由于基地十张十进制数有时不能准确地存储在二进制,你废话这样。

相反,我要寻找一个字符串格式的解决方案



Answer 3:

我知道,这可能是一个晚一天和美元空头,但我也一直在寻找这样的事情,而这个问题促使我寻找到了Math.round功能

我想出这个成功地舍入给定值到最接近5日,第100。 所以0.07变为0.05。 23.45 23.45变。 1006.32成为1006.30。

<script>
function rounder() {
var exampleInput = $("#inputId").val();
$("#output").html(((Math.round(((Math.round(exampleInput*100)/5)*5)/5)*5)/100).toFixed(2));
}
</script>

作为一个新手,我敢肯定,有一种方法,使这个代码更高效。



Answer 4:

这就是所谓的JavaScript的问题,当你做这样的事情:

0.1 + 0.5 = 0.600000000001 or 0.599999999998

针对此问题的解决方案是使用JavasSript库中的一个具有固定的精度和舍入模式。 你可以试试大的数字 。 下面是代码例如:

// Initialization
var bn = new BigNumbers({
    precision: 20, // fixed precision 20 digits after decimal separator 
    roundingMode: BigNumbers.RoundingMode.HALF_UP // rounding mode is Half Up
});

var number1 = bn.of('15');
var number2 = bn.of('12');


var divideResult = number1.divide(number2); // result "1.25"
var multiplyResult = divideResult.multiply(1/2); // result "0.625"
var roundingToTwoDecimalResult = multiplyResult.toPrecision(2); // result "0.63"

在JavaScript的教程为同



Answer 5:

围捕大型小数工具。 可以通过调整分配“小数”不同的值来处理不同尺寸的小数。

const roundToWholeNumber = (num, decimal = 100000) => {

    const _roundingHelper = (val, decimalPlace) => {

        return Math.round(val * decimalPlace) / decimalPlace;

    }

    while(decimal > 1){
        num = _roundingHelper(num, decimal)
        decimal = decimal / 10
    }

    return Math.round(num)   
}
roundToWholeNumber(5.44444555)


Answer 6:

我其实一直在处理这是我一直在努力实施四舍五入为载体的项目我工作的一个解决方案。 实际上,我惊讶这个旧的(2011) javascripter.net资源还没有做到了,特别是因为它是使用Math.round( // ...前面提到的。

我添加了一下它,还利用.toFixed()尽管这会砍掉任何尾随零,对此我并不担心,在这个阶段,个人):


const round = (number, places) => {
   let rounder = '1';

   for (let i = 0; i < places; i++) {
       rounder += '0';
   }

   return (Math.round(number * rounder) / rounder).toFixed(places);
};

我敢肯定有一些问题,在效率和冗余方面以上; 但我的观点是, Math.round()还是做什么,你需要它。 可能需要抛出一个转换在上面,迭代后。

这也是一个很大赫克比更容易一些其他提议的解决方案的阅读。



文章来源: Rounding to the nearest hundredth of a decimal in JavaScript