c# - 舍入到给定数字数组中最接近的数字

标签 c# rounding

在发布此内容之前,我查看了以下两个答案:

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/

相关文章:

c# - 带有 Crystal 报表的数据库登录提示

c# - 更改 XAML 文件后 Visual Studio 挂起

c# - <PrivateImplementationDetails>{GUID}.method$$**** 在代码文件中。不编译!

java - 是否有一种舍入算法可以取消以 2 为基数的转换并推断精度? *希望在Java中*

Java:四舍五入到任意值

c - 如何将 float 舍入到给定的小数精度

ruby - 在 ruby 中 float 圆形错误?

c# - 如果单元格的内容大于其宽度,如何在 DataGrid 中显示省略号?

c# - 如何将 VB5 项目转换为 C# 项目

r - 控制数字/舍入作为基本函数中的参数