首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数字转换为整数而不是字符串?

如何将数字转换为整数而不是字符串?
EN

Stack Overflow用户
提问于 2010-01-11 16:48:21
回答 19查看 83.2K关注 0票数 18

我遇到了一个问题:“如何才能将数字反转为整数而不是字符串?”有人能帮我找出答案吗?反转应该反转数字的小数位数,即使用基数10。

EN

Stack Overflow用户

发布于 2010-01-11 16:51:48

像这样的东西?

代码语言:javascript
复制
public int ReverseInt(int num)
{
    int result=0;
    while (num>0) 
    {
       result = result*10 + num%10;
       num /= 10;
    }
    return result;
}

作为一个粗俗的一行(更新:使用本杰明的评论来缩短它):

代码语言:javascript
复制
num.ToString().Reverse().Aggregate(0, (b, x) => 10 * b + x - '0');

一个速度更快的1.25行代码:

代码语言:javascript
复制
public static int ReverseOneLiner(int num)
{
    for (int result=0;; result = result * 10 + num % 10, num /= 10) if(num==0) return result;
    return 42;
}

这不是一行,因为我必须包含return 42;。C#编译器不让我编译,因为它认为没有代码路径返回值。

附注:如果你写了这样的代码,而一个同事抓住了它,那么他/她对你所做的一切都是你应得的。请注意!

编辑:我想知道LINQ一行程序的速度有多慢,所以我使用了以下基准代码:

代码语言:javascript
复制
public static void Bench(Func<int,int> myFunc, int repeat)
{
    var R = new System.Random();
    var sw = System.Diagnostics.Stopwatch.StartNew();
    for (int i = 0; i < repeat; i++)
    {
        var ignore = myFunc(R.Next());
    }
    sw.Stop();
    Console.WriteLine("Operation took {0}ms", sw.ElapsedMilliseconds);
}

结果(10^6个随机数在正int32范围内):

代码语言:javascript
复制
While loop version:
Operation took 279ms

Linq aggregate:
Operation took 984ms
票数 53
EN
查看全部 19 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2040702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档