当前位置: 首页 > 面试题库 >

JavaScript数学,四舍五入到小数点后两位[重复]

商经业
2023-03-14
问题内容

我有以下JavaScript语法:

var discount = Math.round(100 - (price / listprice) * 100);

这四舍五入为整数。如何返回两位小数的结果?


问题答案:

注-如果3位数精度很重要,请参阅编辑4

var discount = (price / listprice).toFixed(2);

toFixed将根据超过2个小数的值为您舍入或舍入。

编辑 -正如其他人所提到的,它将结果转换为字符串。为了避免这种情况:

var discount = +((price / listprice).toFixed(2));

编辑2-
正如注释中所提到的,此函数在某种程度上会失败,例如在1.005的情况下,它将返回1.00而不是1.01。如果准确性在这个程度上很重要,这似乎与我尝试过的所有测试都很好。

但是,需要进行一些小的修改,上面链接的答案中的函数在四舍五入时将返回整数,因此例如99.004将返回99而不是99.00,这对于显示价格而言并不理想。

编辑3- 似乎在实际收益表上固定了TOST仍在搞砸一些数字,此最终编辑似乎有效。哎呀,这么多返工!

   var discount = roundTo((price / listprice), 2);

   function roundTo(n, digits) {
     if (digits === undefined) {
       digits = 0;
     }

     var multiplicator = Math.pow(10, digits);
     n = parseFloat((n * multiplicator).toFixed(11));
     var test =(Math.round(n) / multiplicator);
     return +(test.toFixed(digits));
   }

编辑4- 你们杀了我。Edit 3对负数失败,而没有深入研究为什么在进行舍入之前将负数变为正数更容易处理,然后在返回结果之前将其变回正好。

function roundTo(n, digits) {
    var negative = false;
    if (digits === undefined) {
        digits = 0;
    }
        if( n < 0) {
        negative = true;
      n = n * -1;
    }
    var multiplicator = Math.pow(10, digits);
    n = parseFloat((n * multiplicator).toFixed(11));
    n = (Math.round(n) / multiplicator).toFixed(2);
    if( negative ) {    
        n = (n * -1).toFixed(2);
    }
    return n;
}


 类似资料:
  • 我如何四舍五入到两个小数位?

  • 问题内容: 如果值为,则应将其格式化为。如果是,那么应该是。 问题答案: 这是一个实用程序,可以将双精度舍入(而不是截断)双精度至小数位数。 例如: 原始版本;提防这个 这在小数位数很高(例如)或整数部分很大(例如)的极端情况下会严重崩溃。感谢Sloin指出这一点。 多年来,我一直在使用上面的方法将“不太大”的双精度取整到2或3个小数位(例如,以秒为单位的清理时间用于记录目的:27.9876543

  • 获取以下数字集--> 当相加时,这些给出一个整数。

  • 我需要把分钟换算成小时,四舍五入到小数点后两位。我还需要在小数点后显示最多两个数字。所以如果我有650分钟,那么小时应该是10.83。 但在这种情况下,如果我的分钟数是630小时,那就是10.5000000。但我只想要10.50(四舍五入后)。我如何做到这一点?

  • 假设我有一个简单的浮点数数组 [0.315023,1.0,0.12345,0121111] 并称之为arr1。 我需要把这个数组变成这样: [0.3150, 1.0000, 0.1234, 0.1211] *请注意,1.0 现在是 1.0000,0.3150 末尾为 0 我尝试使用for循环遍历数组,并将数字四舍五入如下: // i代表arr1中的一个数字;我们来想象一下,用“newNum”替换a

  • 我已经阅读了很多stackoverflow问题,但似乎没有一个对我有效。我正在使用<code>数学。round()进行舍入。这是代码: 我得到的输出是:< code>123,但我希望它是< code>123.14。我知道添加< code>*100/100会有所帮助,但是正如你所看到的,我并没有设法让它工作。 输入和输出都是双份绝对是必不可少的。 如果您更改上述代码的第4行并发布它,那将是很大的帮助