【问题标题】:Convert.ToInt or String.Split : which is more efficient?Convert.To Int 或 String.Split :哪个更有效?
【发布时间】:2010-03-24 19:12:43
【问题描述】:

哪种方法更好地去除浮点小数位或有更有效的方法?

四舍五入不重要,我有兴趣显示数字

      Float number;            
      1- int wholeNumber= Convert.ToInt(number);
         string display=wholeNumber.ToString();

      2- string [] splitNumber= number.ToString().Split('.');
         string display=splitNumber[0];

【问题讨论】:

    标签: c# floating-point integer


    【解决方案1】:

    这里有两个更有效的选项:

    只需投射号码而不是调用Convert.ToInt32

    ((int)number).ToString()
    

    使用带零位小数的格式说明符格式化数字:

    number.ToString("N0")
    

    第一个应该稍微快一些,因为格式化整数比格式化浮点数更容易。

    如果您想要一些真正高效的东西,您可以将数字转换为整数,然后使用经过优化的代码自行将其格式化为字符串,仅执行您需要的操作,仅此而已。

    【讨论】:

    • +1 表示number.ToString("N0"),简单且准确地描述了代码的意图,使其易于阅读。我怀疑它所拥有的任何低效率在大多数情况下都会成为问题。
    【解决方案2】:

    因为你只是去掉小数点,所以:

    int wholeNumber = (int)number;
    

    这将有效地删除小数点。请注意,它不会对数字进行四舍五入,但这不是您要求的行为。

    【讨论】:

      【解决方案3】:

      1 更好,因为它描述了你在做什么。不同地区的 2 次休息。

      【讨论】:

        【解决方案4】:
        int i = (int)number;
        string display = i.ToString();
        

        转换为 int 会自动去掉所有小数位

        【讨论】:

          【解决方案5】:

          我假设你所说的更高效,是指“更快”。

          您是否尝试过自己确定这一点?我怀疑你会得到一个明确的答案,除非其他人继续尝试。

          设置一个循环执行相同过程 1000 次左右(根据需要调整数字),然后计算差异时间。

          【讨论】:

            【解决方案6】:

            使用 number.ToString("N0") 是一个灌篮。尝试优化它是没有意义的,无论你做什么来向用户显示字符串都会变得更昂贵。

            【讨论】:

              【解决方案7】:

              如果只是为了显示,传入正确的格式字符串,完全不需要转换:

              Float number;             
              string display=number.ToString("F0"); 
              

              注意:这是高效的编码,不一定是内存或速度效率 - 您只能通过对每种方法进行多次重复循环的时间来确定这一点。

              【讨论】:

                【解决方案8】:

                此测试通过,因此两者都有效。虽然不确定效率。你觉得哪个更好读? Truncate 调用更明确地说明您在做什么。

                [Test]
                public void Getting_whole_number()
                {
                   Assert.AreEqual("5", Math.Truncate(5.5).ToString());
                   Assert.AreEqual("5", ((int)5.5).ToString());
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-03-03
                  • 2012-08-25
                  • 1970-01-01
                  • 2016-01-12
                  • 2010-10-22
                  • 2011-08-11
                  相关资源
                  最近更新 更多