[英]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/
在旁注中, Round
与Truncate
具有不同的行为。
由于这三个方法都转换为双精度,因此调用函数的两个方法将变慢,因为还有更多工作要做。 这可以通过基准进行确认。
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.