2015-04-21 5 views
1

Это мое первое сообщение о переполнении стека. Если я ошибаюсь, пожалуйста, исправьте меня:C# как преобразовать двойной массив int

Используя C#, я бы хотел преобразовать double в массив int переменной длины, равный общему количеству цифр в double.

, например, если у меня был номер 35.777778, я хотел бы, чтобы преобразовать его в Int массив, где

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

Я планирую перебрать массив и сравнить массив [я] в массив [я + 1 ].

Двойной будет частным от двух переменных чисел. Таким образом, у него может быть очень мало digtis или много цифр.

До сих пор я пытался преобразовать его в строку, а затем в массив ints. Но он падает с десятичной точкой.

Пожалуйста, помогите мне ...

+0

Это может представлять интерес http://stackoverflow.com/questions/1040707/c-sharp-get-digits-from-float-variable – Andersnk

+0

Зачем вам нужен массив целых чисел, когда максимальное значение цифры равно 10? – Alex

+0

такой массив называется «строка» – n0rd

ответ

0

Вы могли бы сделать это так, как вы делали (преобразовать в строку, а затем разобрать каждый символ на межд) и просто раздеть десятичную точку. Например:

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++; 
} 

Это, очевидно, не самое подходящее решение, но это сработает.

1

Это следует сделать это:

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

Это работает! Мне удалось решить эту проблему самостоятельно, но с использованием более МНОГО кода, чем это. Спасибо, Чомба! – shagNasty

+0

Проблема: это решение работает просто dandy в консольном приложении. Но когда я пытаюсь добавить его в портативную библиотеку, он говорит, что нет такого животного, как «String.select». Есть ли ссылка, которую мне нужно добавить или что-то подобное? – shagNasty

+0

Ну, это потому, что 'String' не реализует' IEnumerable 'в PCL. Поэтому вам нужно преобразовать строку в массив символов с помощью 'ToCharArray()', например: '.Replace (...). ToCharArray(). Выберите (...' – chomba

0

с плавающей запятой в десятичное преобразование цифр является трудной задачей. В .NET у инструмента есть доступный метод double.ToString, который раздувается и особенно плох, когда вам нужны цифры. Как вы видите, другие ответы все должны анализировать обратно на целое число.

Если производительность важна, есть хорошие алгоритмы преобразования в двойные строки, которые могут быть изменены в соответствии с вашими потребностями. Это один хороший:

C# port of google's Grisu conversion

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

Этот код будет работать, даже если двойное значение содержит любое charater, как E-10

Смежные вопросы