JavaScript中Math.ceil或Math.round上的非十进制数字?

JavaScript中Math.ceil或Math.round上的非十进制数字?,javascript,math,numbers,rounding,Javascript,Math,Numbers,Rounding,我想用Javascript来计算一个数字。 比如说像这样, 15 => 20 345 => 400 201 => 300 180 => 200 93 => 100 22 => 30 如何使用Javascript实现这一点?我知道我可以使用Math.ceil或Math.round,但这不是十进制数。第一个示例的解决方案: var n = 15; n /= 10; //n = 1.5 n = Math.ceil(n); //n = 2 n *= 10; //n

我想用Javascript来计算一个数字。 比如说像这样,

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

如何使用Javascript实现这一点?我知道我可以使用Math.ceil或Math.round,但这不是十进制数。

第一个示例的解决方案:

var n = 15;
n /= 10; //n = 1.5
n = Math.ceil(n); //n = 2
n *= 10; //n = 20

其他示例的工作方式相同。

第一个示例的解决方案:

var n = 15;
n /= 10; //n = 1.5
n = Math.ceil(n); //n = 2
n *= 10; //n = 20

其他的例子也是如此。

你把数字除以10/100/1000,得到小数,然后ceil/round。然后再乘一次


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

你把你的数字除以10/100/1000,得到小数,然后ceil/round怎么样。然后再乘一次


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

要四舍五入到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;

要四舍五入到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;
}

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

一个基本的解决办法是

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

我建议你回复你的编辑,因为你已经对原来的问题有了很好的答案。我认为你编辑你的问题是非常粗鲁的,以前正确的答案现在会变得不正确。我很抱歉。我只是重新编辑我的问题。我建议你回复你的编辑。因为你已经对原来的问题有了很好的答案。我认为你编辑问题的方式是粗鲁的,以至于以前正确的答案现在会变得不正确。我很抱歉……我现在只是重新编辑我的问题…使一个好的程序员能够理解模糊规范。处理原始问题中的示例输入:。然而,这个问题从那时起就被编辑了,所以答案不再适用。一个好的程序员应该具备理解模糊规范的能力;处理原始问题中的示例输入:。但是,该问题自年以来已被编辑,因此答案不再适用。