簡體   English   中英

C#如何將double轉換為int數組

[英]C# how to convert a double an int array

這是我有關堆棧溢出的第一篇文章。 如果我做錯了,請糾正我:

使用C#,我想將一個double轉換為一個可變長度的int數組,該數組的長度等於double中的位數。

例如,如果我有數字35.777778,我想將其轉換為int數組,其中

array[0] = 3
array[1] = 5
array[2] = 7
etc.

我計划遍歷數組並將array [i]與array [i + 1]比較。

雙精度數將是兩個變量數的商。 因此,它可能只有很少的數字或很多數字。

到目前為止,我已經嘗試將其轉換為字符串,然后轉換為整數數組。 但是它在小數點崩潰。

請幫我...

應該這樣做:

int[] array = 35.777778.ToString().Replace(".", String.Empty)
                                  .Select(c => (int)Char.GetNumericValue(c))
                                  .ToArray();

您可以按照自己的方式進行操作(轉換為字符串,然后將每個char解析為一個int),然后去除小數點。 像這樣:

var nums = decimalNum.ToString().Replace('.', '').ToCharArray();
int[] numbers = new int[nums.Count];
var x = 0;
foreach (var item in nums)
{
    numbers[x] = Integer.ParseInt(item);
    x++;
}

顯然,這不是最漂亮的解決方案,但它可以工作。

浮點數到十進制數字的轉換是一個難題。 在.NET中,可用的工具實際上是double.ToString方法,它method腫且在需要數字時尤其糟糕。 如您所見,所有其他答案都必須解析回整數。

如果性能很重要,那么可以使用一些不錯的雙字符串轉換算法,以適應您的需求。 這個很好:

Google Grisu轉換的C#端口

int[] array = 35.777778.ToString().Where(c => char.IsDigit(c)).Select(c1 => Convert.ToInt32(c1.ToString())).ToArray();

即使double值包含任何字符(例如E-10),此代碼也將起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM