相关疑难解决方法(0)

计算整数小数长度的最快方法?(.净)

我有一些代码可以对64位整数进行大量的比较,但是它必须考虑数字的长度,就像它被格式化为字符串一样.我无法更改调用代码,只能更改函数.

最简单的方法(除了.ToString().Length)是:

(int)Math.Truncate(Math.Log10(x)) + 1;
Run Code Online (Sandbox Code Playgroud)

然而,这表现得相当糟糕.由于我的应用程序只发送正值,并且长度相当均匀地分布在2到9之间(偏向9),我预先计算了值并使用if语句:

static int getLen(long x) {
    if (x < 1000000) {
        if (x < 100) return 2;
        if (x < 1000) return 3;
        if (x < 10000) return 4;
        if (x < 100000) return 5;
        return 6;
    } else {
        if (x < 10000000) return 7;
        if (x < 100000000) return 8;
        if (x < 1000000000) return 9; 
        return (int)Math.Truncate(Math.Log10(x)) + 1; // Very uncommon
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以用平均4个比较来计算长度.

那么,我有什么其他技巧可以让这个功能更快吗?

编辑:这将作为32位代码(Silverlight)运行.

更新:

我采纳了Norman的建议并且稍微改变了ifs,导致平均只有3个比较.根据Sean的评论,我删除了Math.Truncate.总之,这促进了大约10%的事情.谢谢!

.net c# performance integer

17
推荐指数
2
解决办法
6791
查看次数

获取整数的数字

有没有办法得到一个整数的位数?例如:

int a = 12345;
Run Code Online (Sandbox Code Playgroud)

我想确定它a有5位数

c#

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×2

.net ×1

integer ×1

performance ×1