C#如何转换double一个int数组

时间:2015-04-21 23:00:10

标签: c# arrays int double converter

这是我在Stack Overflow上的第一篇文章。如果我做错了,请纠正我:

使用C#,我希望将double转换为可变长度的int数组,该数组等于double中的总位数。

例如,如果我的数字为35.777778,我想将其转换为int数组

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

我计划迭代数组并将array [i]与array [i + 1]进行比较。

double将是两个变量数的商。所以它可能只有很少的数字或很多数字。

到目前为止,我已尝试将其转换为字符串,然后转换为int数组。但它在小数点崩溃。

请帮帮我......

4 个答案:

答案 0 :(得分:1)

这应该这样做:

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

答案 1 :(得分:0)

你可以按照你的方式去做(转换为字符串,然后将每个字符解析为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++;
}

这显然不是最漂亮的解决方案,但它会起作用。

答案 2 :(得分:0)

浮点到十进制数字转换是一个难题。在.NET中,可用的工具实际上是double.ToString方法,当你需要数字时它会变得臃肿并且特别糟糕。如您所见,其他答案都需要解析为整数。

如果性能很重要,那么有很好的双字符串转换算法可以修改以满足您的需求。这个很好:

C# port of google's Grisu conversion

答案 3 :(得分:0)

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

即使double值包含任何类似E-10

的字符,此代码也能正常工作