我知道有很多方法可以去除数字的小数位。
例如,如果我有一个变量,类型为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。
答案 0 :(得分:3)
忽略“最快”的问题-使用Math.Truncate
。为什么?因为您的问题基本上是“这是截断最快的方法”。没关系它们都非常快,O(1)
。使用最干净的一个。类似于您实际要执行的操作。
也请阅读以下内容: https://blog.codinghorror.com/micro-optimization-and-meatballs/
在旁注Round
与Truncate
的行为不同。
答案 1 :(得分:1)
由于这三个方法都转换为double,因此调用函数的两个方法将变慢,因为还有更多工作要做。可以使用基准进行确认。
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