假设x
,a
和b
是数字。我需要将x
限制在段[a,b]
的范围内。
换句话说,我需要一个钳制函数:
clamp(x) = max( a, min(x, b) )
有人能想出一个更具可读性的版本吗?
有人建议在内置的Math
对象中添加一个附加项来实现这一点:
Math.clamp(x, lower, upper)
但是请注意,从今天开始,这是第一阶段的提议。在它得到广泛支持之前(这是不保证的),您可以使用多边形填充物。
一个不太面向数学的方法,但也应该工作,这样,
js prettyprint-override">function clamp(num, min, max) {
return num <= min
? min
: num >= max
? max
: num
}
你做这件事的方式很标准。您可以定义一个实用程序clamp
函数:
/**
* Returns a number whose value is limited to the given range.
*
* Example: limit the output of this computation to between 0 and 255
* (x * 255).clamp(0, 255)
*
* @param {Number} min The lower boundary of the output range
* @param {Number} max The upper boundary of the output range
* @returns A number in the range [min, max]
* @type Number
*/
Number.prototype.clamp = function(min, max) {
return Math.min(Math.max(this, min), max);
};
(尽管扩展语言内置程序通常不被允许)
问题内容: 有没有比这更好,更优雅(和/或更快)的方式 …? 编辑 :因为我不能选择两个答案,所以我要使用正则表达式,因为a)很优雅,并且b)说“ Jon Skeet解决了问题”是一种重言式,因为Jon Skeet自己就是所有问题的解决方案。 问题答案: 我不认为Java有任何内置功能可以更快,更可靠地完成此操作,但前提是您稍后希望使用Double.valueOf(或类似功能)对其进行解析。 我会
问题内容: 到目前为止,这是我得到的: 这让我既震惊又浪费。如果存在firstChoice,则我将不必要地计算secondChoice。 还有一个更有效的版本: 在这里,如果不复制映射器或声明另一个局部变量,就无法将某些映射函数链接到最后。所有这些使代码比要解决的实际问题更加复杂。 我宁愿这样写: 但是可选:::显然不存在。怎么办? 问题答案: 试试这个: map方法为您提供了一个。然后,该方法将
问题内容: 我一直在使用此功能,但我想知道什么是最有效,最准确的方法。 问题答案: 第0天是上个月的最后一天。因为month构造函数是基于0的,所以效果很好。有点hack,但这基本上就是您减去32的结果。
接受的答案建议使用以下公式,用于在给定的和之间生成一个随机整数,其中和包括在范围内: 但它也说 这仍然是稍微偏向较低的数字...也可以扩展它,这样它就可以消除这种偏向。
本文向大家介绍检查Python中字符串是否为空的最优雅的方法是什么?,包括了检查Python中字符串是否为空的最优雅的方法是什么?的使用技巧和注意事项,需要的朋友参考一下 空字符串是“虚假的”,这意味着它们在布尔上下文中被认为是错误的,因此您只能使用非字符串。 示例 输出结果 这将给出输出: 示例 如果您的字符串可以有空格,并且您仍然希望它的值为false,则可以剥离它并再次检查。例如: 输出
我试着写一个代码,它接受一个介于1和1_000_000之间的整数,并返回一个比相同数字的整数大的最小整数,如果它不存在,则打印0。 举个例子 输入:156 输出165 输入330 输出0 输入27711 输出71127 我的问题是,下面的代码没有为其他输入返回正确的输出。 例如,在输入4231中,输出应该是4312。 我很难找到为每个输入返回正确输出的最佳算法。 TNX提前 }