【问题标题】:C# how to convert a double an int arrayC#如何转换一个双整数数组
【发布时间】:2015-06-29 08:24:21
【问题描述】:

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

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

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

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

我打算遍历数组并将数组[i] 与数组[i + 1] 进行比较。

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

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

请帮帮我...

【问题讨论】:

  • 为什么需要一个整数数组,当一个数字的最大值是10?
  • 这样的数组叫做'a string'
  • @Alex 你应该更了解。现在是 9。:D
  • 我需要提取个位数,0 到 9。

标签: c# arrays int double converter


【解决方案1】:

应该这样做:

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

【讨论】:

  • 这行得通!我确实设法自己解决了它,但使用的代码比这多得多。谢谢Chomba!
  • 问题:这个解决方案在控制台应用程序中非常有效。但是当我尝试将它添加到便携式库时,它说没有像“String.select”这样的动物。有没有我需要添加的参考资料或类似的东西?
  • 那是因为String 没有在 PCL 中实现 IEnumerable<char>。所以你必须用ToCharArray()将字符串转换成char数组,像这样:.Replace(...).ToCharArray().Select(...
【解决方案2】:

您可以按照您的方式进行操作(转换为字符串,然后将每个 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++;
}

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

【讨论】:

    【解决方案3】:

    浮点到十进制数字的转换是一个难题。在 .NET 中,可用的工具实际上是 double.ToString 方法,当您需要数字时,该方法很臃肿而且尤其糟糕。如您所见,其他答案都必须解析回整数。

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

    C# port of google's Grisu conversion

    【讨论】:

      【解决方案4】:
      int[] array = 35.777778.ToString().Where(c => char.IsDigit(c)).Select(c1 => Convert.ToInt32(c1.ToString())).ToArray();
      

      即使双精度值包含 E-10 之类的任何字符,此代码也能正常工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 2011-01-07
        • 2018-04-01
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多