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

截断(不舍入)JavaScript中的十进制数字

何兴邦
2023-03-14
问题内容

我试图将十进制数字截断到小数位。像这样:

5.467   -> 5.46  
985.943 -> 985.94

toFixed(2)所做的只是正确的事情,但是却舍入了价值。我不需要四舍五入的价值。希望这是可能的JavaScript。


问题答案:

更新

因此,无论如何,四舍五入的bug总是会困扰着您,无论您如何努力补偿它们。因此,应该通过精确地用十进制表示法来解决该问题。

Number.prototype.toFixedDown = function(digits) {
    var re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),
        m = this.toString().match(re);
    return m ? parseFloat(m[1]) : this.valueOf();
};

[   5.467.toFixedDown(2),
    985.943.toFixedDown(2),
    17.56.toFixedDown(2),
    (0).toFixedDown(1),
    1.11.toFixedDown(1) + 22];

// [5.46, 985.94, 17.56, 0, 23.1]

旧的易出错的解决方案基于其他人的编译:

Number.prototype.toFixedDown = function(digits) {
  var n = this - Math.pow(10, -digits)/2;
  n += n / Math.pow(2, 53); // added 1360765523: 17.56.toFixedDown(2) === "17.56"
  return n.toFixed(digits);
}


 类似资料:
  • 问题内容: 我试图确定截断或删除SQL中多余的小数位而不舍入的最佳方法。例如: 这将自动舍入为,这在大多数情况下是很好的。但是,对于这个项目,我不需要。有没有一种简单的方法可以截断我不需要的小数?我知道我可以使用该函数并将其转换回十进制。还有其他方法吗? 问题答案:

  • 问题内容: Angular是否具有内置指令来舍入输入值? 在这种情况下,数字过滤器不合适,因为我也想在ng-model中也舍入实际值。如果我必须写一个,那会是什么样? 问题答案: 您可以使用指令创建双向绑定转换。这是一个简单的例子: http://plnkr.co/edit/kz5QWIloxnd89RKtfkuE?p=preview 这实际上取决于您希望它如何工作。是否应该限制用户输入?您介意模

  • 我想设置两个BigDecimal数字和的比例。如本例所示: 当我运行时,我有一个例外: 为什么四舍五入是必要的?如果我不想让周围,什么是解决方案? 谢谢

  • 问题内容: 我有一系列的Java小数,例如: 我希望将所有小数点后5位保留下来。这怎么可能? 问题答案: 如果您想让事情变得简单快捷。;) 版画

  • DB2的JDBC驱动程序似乎正在截断数字/十进制字段的精度。我在SALES表中定义了以下字段: 十进制金额(16,16) 然后我执行以下插入语句: 插入到销售额(金额)值(14.12345678) 如果我使用DB2控制中心中的查询工具进行查询,我得到14.1234567800000000。 如果我使用Squirrel(一个使用DB2的JDBC驱动程序连接到数据库的DB客户机)执行此操作,我将得到1

  • 问题内容: 假设我的值为15.7784514,我想不进行四舍五入地显示为15.77。 结果是 - 如何显示15.77? 问题答案: 将数字转换为字符串,将数字匹配到小数点后第二位: 该方法在某些情况下(与)不同而失败,因此请务必小心。