【问题标题】:Find nearest next even 100查找最近的下一个偶数 100
【发布时间】:2016-10-07 21:20:37
【问题描述】:

在javascript中找到最接近给定数字的下一个偶数100(“偶数100”= 200、400等)的最简单方法是什么。例如:1723 应该返回 1800,1402 应该返回 1600,21 应该返回 200,17659 应该返回 17800 等等。我有以下内容可以找到给定_num 旁边最近的 100,但不是偶数 100

(parseInt(((given_num + 99) / 100 )) * 100 )

我可以想到一种方法来获取不带零的数字并检查它是否奇数/偶数以找出下一个偶数是否奇数。但更想知道是否有一些简单/优雅的方法。

【问题讨论】:

  • 1723 应该给你 1900,而不是 1800,如果规则有意义的话。
  • 我认为他想要 200 的下一个倍数(“偶数 200”=200、400 等)
  • @bmb:啊!好吧....
  • 除以 200,四舍五入,乘以 200。
  • @bmb:大声笑,正是我的回答说的。 :-)

标签: javascript numbers zero


【解决方案1】:

基于bmb's comment,听起来您希望粒度为 200,而不是 100。如果是这样:

除以 200,四舍五入,乘以 200:

var tests = [
  {value: 1723, expect: 1800},
  {value: 1402, expect: 1600},
  {value: 21, expect: 200},
  {value: 17659, expect: 17800}
];
tests.forEach(test);
function test(entry) {
  var result = Math.ceil(entry.value / 200) * 200;
  console.log({
    value: entry.value,
    expect: entry.expect,
    result: result
  });
}

如果你真的想通过四舍五入到“下一个 100”来工作,那么如果 1402 的结果是 1600,那么 1723 的结果必须是 1900,你可以通过除以 100、四舍五入、乘以 100 来实现, 加 100(或者除以 100,四舍五入,加 1,乘以 100,都是一样的):

var tests = [
  {value: 1723, expect: 1800},
  {value: 1402, expect: 1600},
  {value: 21, expect: 200},
  {value: 17659, expect: 17800}
];
tests.forEach(test);
function test(entry) {
  var result = Math.ceil(entry.value / 100) * 100 + 100;
  console.log({
    value: entry.value,
    expect: entry.expect,
    result: result
  });
}

【讨论】:

  • 是的,这行得通 :) 这正是我想要的
【解决方案2】:

如果不是偶数则递归调用,添加1 以转到下一个 100 等

function closestEven(n) {
	var x = Math.ceil(n / 100 ), y = x * 100;
	return x % 2 === 0 ? y : closestEven(y+1);
}

console.log( closestEven(1723) ); // 1800
console.log( closestEven(1402) ); // 1600
console.log( closestEven(21) );   //  200
console.log( closestEven(17659)); // 17800

【讨论】:

  • 加 100 以更快地到达那里,或者有条件地返回 y+100 :)
  • @Traktor53 - 只添加1 就足够了,因为无论如何它会向上舍入到最接近的100,它不会遍历所有99 个数字才能到达那里。
【解决方案3】:

试试这个:

var given_num = 1723;
var result = (given_num) + (100 - ((given_num + 100) % 100));
alert(result);

【讨论】:

  • 这不适用于 1402.. 它返回 1500 但应该是 1600
  • ...和“试试这个”的答案没有用。说出你做了什么,以及为什么
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2023-03-11
  • 2013-06-16
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多