这是我在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数组。但它在小数点崩溃。
请帮帮我......
答案 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方法,当你需要数字时它会变得臃肿并且特别糟糕。如您所见,其他答案都需要解析为整数。
如果性能很重要,那么有很好的双字符串转换算法可以修改以满足您的需求。这个很好:
答案 3 :(得分:0)
int[] array = 35.777778.ToString().Where(c => char.IsDigit(c)).Select(c1 => Convert.ToInt32(c1.ToString())).ToArray();
即使double值包含任何类似E-10
的字符,此代码也能正常工作