Sea*_*lly 42 java math range max min
我希望返回该数字,只要它在一个限制内,否则返回限制的最大值或最小值.我可以用Math.min
和组合来做到这一点Math.max
.
public int limit(int value) {
return Math.max(0, Math.min(value, 10));
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否存在我正在忽视的现有limit
或range
功能.
如果第三方图书馆很常见,欢迎加入(例如:Commons或Guava)
Bar*_*aes 23
OP在标准库中请求此实现:
int ensureRange(int value, int min, int max) {
return Math.min(Math.max(value, min), max);
}
boolean inRange(int value, int min, int max) {
return (value>= min) && (value<= max);
}
Run Code Online (Sandbox Code Playgroud)
可惜标准的数学库缺乏这些
从版本21开始,Guava包含Ints.constrainToRange()
(以及其他基元的等效方法).从发行说明:
添加
constrainToRange([type] value, [type] min, [type] max)
了将给定值约束到由min
和max
值定义的闭合范围的方法.如果它在范围内,它们返回值本身,如果它在范围min
之下,max
如果它在范围之上,则返回值.
复制自@ dimo414的/sf/answers/3007777811/.
不幸的是,这个版本是截至2017年7月的最新版本,并且在一些项目中(参见/sf/answers/2848428201/),Guava破坏了向后兼容性,这要求我现在停留在第19版.我也很震惊,Commons Lang和Commons Math都没有!:(
我知道这是针对 Java 要求的。在 Android 世界中,将 Kotlin 和 Java 结合使用是很常见的。如果一些 Kotlin 用户到达这里(就像我一样),那么他们可以使用coerceIn
扩展功能:
科特林代码:
println(10.coerceIn(1, 100)) // 10
println(10.coerceIn(1..100)) // 10
println(0.coerceIn(1, 100)) // 1
println(500.coerceIn(1, 100)) // 100
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Android,请使用MathUtils(在支持库中),它只有一个专门执行此功能的函数,称为钳位。
此方法采用一个数值,并确保它适合给定的数值范围。如果数字小于范围所需的最小值,则将返回范围的最小值。如果数字大于范围允许的最大值,则将返回范围的最大值。
该Math.max(int a, int b)
函数定义为:
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以将max
和min
功能组合如下:
private static int MAX=10;
private static int MIN=0;
public int limit(int a) {
return (a > MAX) ? MAX : (a < MIN ? MIN: a );
}
Run Code Online (Sandbox Code Playgroud)
Java 21 中添加了新Math.clamp
方法(具有多个重载),可以方便地将数值限制在指定的最小值和最大值之间:
int valueToClamp = 0;
System.out.println(Math.clamp(valueToClamp, 1, 10)); // 1
Run Code Online (Sandbox Code Playgroud)
public static int clamp(long value, int min, int max)
value
- 钳位值min
- 最小允许值max
- 最大允许值 归档时间: |
|
查看次数: |
39721 次 |
最近记录: |