[英]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.