簡體   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