【问题标题】:Javascript math operation range numberJavascript数学运算范围数
【发布时间】:2014-02-09 14:26:05
【问题描述】:

当我需要将整数限制为最小值和最大值时,我正在尝试解决问题。在我的情况下,它的值可以从 0 到 200,如果你添加它应该添加为开销。所以我想要的是:

var value = 100;
//value - 100  should be 0
//value - 150 should be 150
//value + 150 should be 50

现在我有解决方案如何正确限制顶部(并且仅当最小值为 0 时):

(value - 150) % 200

我知道使用 if 语句可以做到这一点,但我想知道是否可以使用自定义函数更智能。

【问题讨论】:

  • 您能否添加一个 min 不为零的示例? modular arithmetic 的法律可能不再适用。
  • @Bergi 在我的情况下很简单,因为 min 始终为 0,但示例可以是从 10 到 100 的限制值

标签: javascript math


【解决方案1】:

我想知道使用自定义函数是否可以更智能。

数学不一定更聪明,但使用额外的函数会更少编写、更易读且更易于维护。要解决负值问题,请使用:

function mod200(n) {
    return (n % 200 +200) % 200;
}

>>> mod200(100 - 100)
0
>>> mod200(100 - 150)
150
>>> mod200(100 + 150)
50

【讨论】:

  • 它是我所需要的,它很聪明,因为这里只有一行代码;)
  • 虽然不一定高效 :-/ 也许 n<0 ? n%200+200 : n%200 会更聪明 :-)
【解决方案2】:
function bound(value, min, max) {
    return Math.min(Math.max(val,min),max);
}

所以在你的情况下,bound(value,0,200);

【讨论】:

  • -1 OP 似乎需要模运算,而不是钳位。再举第二个例子,bound(100 - 150, 0, 200) 应该是 150,而不是 0。
  • 是的,它会限制在最小值和最大值,但我需要如果值小于 0,那么它应该做最大值 - 值然后是 0
  • so bound(-5,0,200) 应该返回 195
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
相关资源
最近更新 更多