我有一些“引用” float (例如 1.5、3 和 7.1),有什么方法可以让其他一些“随机” float 四舍五入到最接近的一个括号中的strong>? (我的意思是如果有像round这样的东西,可以取引用值进行四舍五入)
或者有什么方法可以让一些数字从 2 舍入到更接近的 1(当然手动决定除外)?
我在数学中没有找到任何方法,也许是一些外部库? 或者为此编写自己的方法是更好的主意(获取括号中每个值的绝对差并获取最小的值)? 我知道这很平庸,但它可能很有用..
感谢您的回复
编辑- 例如。: 如果我想
- “回合”1,得到 1.5
- 第 5 轮,获得 3
- 第 8 轮,获得 7.7
- 第 1.7 轮,获得 1.5
等等。
最佳答案
更优化的答案:
“for i”方式,更易于阅读
private static double roundForI(double toRound, double[] numbers) {
int minIndex = 0;
double minDiff = Double.MAX_VALUE;
double diff;
for (int i=0; i<numbers.length; ++i) {
diff = Math.abs(numbers[i]-toRound);
if (diff < minDiff) {
minDiff = diff;
minIndex = i;
}
}
return numbers[minIndex];
}
更短的一个,“对于每个”方式
private static double roundForEach(double toRound, double[] numbers) {
double diff, roundValue = 0, minDiff = Double.MAX_VALUE;
for (double dob : numbers) {
if ((diff = Math.abs(dob-toRound)) < minDiff) {
minDiff = diff;
roundValue = dob;
}
}
return roundValue;
}
和“Java8 Golf Style”方式,它并不比上面的2种方式更好。
private static double roundLambda(double n, double[] a) {
double[] r = {0}, d = {Double.MAX_VALUE};
Arrays.stream(a).filter((i)->Math.abs(i-n)<d[0]).forEach(i->{d[0]=Math.abs(i-n);r[0]=i;});
return r[0];
}
关于java - 圆形 float 到更接近(或最接近的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873469/