在发布此内容之前,我查看了以下两个答案:
C# Finding Nearest Number in Array
Round integer to nearest high number in array
尽管第一种方法对其中一个答案中提到的扩展方法有所帮助,但我无法深入了解它,无法根据自己的具体情况进行修改和实施,而第二种方法则没有由于其数组长度较短,因此适合我的需要,如果我要使用数组存储所有基数为2的数字(最大为2.68亿),则它将具有相对较多的条目。
基本上我想在这里做的是取RoundedSpeed(使用Math.Round
将其四舍五入为整数),并将其四舍五入为幂的结果(最不能四舍五入,只能向上四舍五入)应用于2。(示例编号包括16384、32768、65536、131072等)
对于此特定示例,我想要四舍五入的数字是32768。(尽管其他方法可能需要另一个数字,但这对我来说是一个问题,超出了本示例的范围)。
这是我现在拥有的代码:
double Speed = Math.Pow(2, ((-900 + Time) / -60)) - 1;
double RoundedSpeed = Math.Round(Speed);
最初我是在使用数组存储要舍入的相关数字,但是还有其他方法可以将
RoundedSpeed
舍入为最接近的基数2整数吗?
最佳答案
尝试这个:
var x = 56;
var y = (int)Math.Pow(2.0, Math.Ceiling(Math.Log(x, 2.0)));
在这种情况下,结果为64。
有效地,这确定了
n
是什么2 ^ n = x
,但是由于n
可能是一个小数,因此它使用Ceiling
将这个数字上移到最接近的整数(如果已经是整数,则保留它)。所以n2 = Ceiling(n)
。然后,它简单地计算2 ^ n2
以获得y
的结果。
关于c# - 舍入到给定数字数组中最接近的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470397/