繁体   English   中英

在C#中删除数字的分数值的最快方法

[英]Fastest way to remove fraction value of a number in C#

我知道有很多方法可以去除数字的小数。

例如,如果我有一个类型为double且数字为12.34的变量。 想要将其转换为int ,这是我可以做的:

int var = (int)fractionalVar;
int var = (int)Math.Round(fractionalVar);
int var = (int)Math.Truncate(fractionalVar);

所以我的问题是:哪一个是最快的?

编辑:我的错,我不是要四舍五入。 这就是我的意思:从数字中删除小数。 例。 12.34至12以及12.99至12。

忽略“最快”问题-使用Math.Truncate 为什么? 因为您的问题基本上是“这是截断最快的方法”。 没关系 它们都非常快,并且O(1) 使用最干净的一个。 类似于您实际要执行的操作。

另请阅读: https : //blog.codinghorror.com/micro-optimization-and-meatballs/

在旁注中, RoundTruncate具有不同的行为。

由于这三个方法都转换为双精度,因此调用函数的两个方法将变慢,因为还有更多工作要做。 这可以通过基准进行确认。

          Method |      N |      Mean |     Error |    StdDev |
---------------- |------- |----------:|----------:|----------:|
    BasicIntCast | 100000 | 0.0001 ns | 0.0002 ns | 0.0002 ns |
    RoundAndCast | 100000 | 0.0514 ns | 0.0064 ns | 0.0056 ns |
 TruncateAndCast | 100000 | 5.4704 ns | 0.0197 ns | 0.0165 ns |

正如其他人提到的那样,所需的最终结果应确定您使用哪种方法。 如果您真的希望例如12.999999 ...变为12,则将其强制转换为int即可完成工作。

编辑:还请注意演员阵容上的溢出!

        double d = 12e25;
        int i = (int)d;
        Console.WriteLine(i);
        // -2147483648

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM