数学上的非十进制数.天花板或数学.round在JavaScript中

Non Decimal Numbers on Math.ceil or Math.round in JavaScript?

本文关键字:round JavaScript 十进制数 天花板 数学上      更新时间:2023-09-26

我想使用Javascript四舍五入一个数字。例如,

15 => 20
345 => 400
201 => 300
180 => 200
93 => 100
22 => 30

如何使用Javascript实现这一点?我知道我能用数学。天花板或数学。四舍五入,但不是小数

第一个例子的解决方案:
var n = 15;
n /= 10; //n = 1.5
n = Math.ceil(n); //n = 2
n *= 10; //n = 20

其他示例的工作方式相同

要舍入到最接近100的倍数,可以写

100*Math.ceil(x/100)

其他因素也一样。

选择一个"好的"因素可能是另一个问题。你可以取以10为底的对数,乘以3,然后四舍五入。然后可以应用下面的映射:

3*round(log10(x))  factor
               0    1
               1    2
               2    5
               3   10
               4   20
               5   50

你不需要存储这个表:使用模运算,你可以计算因子的前导数字,使用第三部分的底数你可以得到后面的零的个数。

这是否合适取决于您的应用程序。你问题中的代码似乎只使用10的幂。在这种情况下,不要用上面的方法乘以3,而是直接使用以10为底的对数的底数:

factor = Math.pow(10, Math.floor(Math.log(x)/Math.log(10)));
rounded = Math.ceil(x/factor)*factor;

你想要的答案取决于精度。

一个基本的解决方案是

function round(num, precision) { 
  var div = Math.pow(10, precision); 
  return Math.ceil(num/div)*div;
}

如果你把你的数字除以10/100/1000得到小数,然后除以整数/四舍五入。然后再相乘。

这是我想到的第一个解决方案。