2016-08-11 4 views
-1

Как преобразовать строку, которая всегда является длиной 5 в формате десятичной запятой, как xx.xxx?Преобразование строки в определенный десятичный формат

Например, строка «01000» в десятичной форме, которая всегда находится в формате 01.000? Мне бы хотелось, чтобы у любого числа, например «19999», было число, равное 19,999.

+4

это не ясно, если у наш ожидаемый результат должен быть другой строкой с десятичным разделителем или правильным десятичным значением – Steve

+1

Преобразование в десятичную и деление на 1000 ... – DavidG

+0

@DavidG хорошо, за исключением ошибок округления и того факта, что нет нулей для чисел => he хочет строку, а не десятичную. –

ответ

0

Он должен содержать строку, а не десятичную. Вы не можете контролировать, где находится десятичная точка, и вы не можете иметь ведущие нули, если вы преобразуете ее в фактический тип decimal. Например, если вы конвертируете 01000 в decimal с 01.000, это будет 1.0.

Используйте это: input.substring(0, 2) + "." + input.substring(2);

+0

Это не десятичный, не так ли? –

+0

После его преобразования десятичная точка будет идти туда, куда она хочет. Он должен оставаться струной. –

+1

@UweKeim OP сказал _decialm point format_, поэтому неясно, хотят ли они просто вставить десятичную или фактически проанализировать 'string' в' decimal' – juharr

0

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

var newString = String.Format("{0}.{1}", input.Substring(0, 2), input.SubString(2)); 

или

var newString = input.Insert(2, "."); 

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


В соответствии с комментарием к вашему вопросу это требование не имеет смысла. Вместо этого выполните правильное деление.

var dec = Decimal.Parse(s); 
var value = dec/1000.0m; 
1

decimal myDecimal = Convert.ToDecimal("01000")/1000;

Это будет работать при условии ввода строки и формат вывода всегда одинаковы.

9

Если ваши требования являются правильными (всегда 5 цифр, всегда отделяя после второй цифры), вы не можете просто сделать

input = "01000"; // or "19999" 
var result = input.Insert(2, "."); // "01.000" or "19.999" 

Нет необходимости в разборе или подстрок.


Если ваш вопрос был на самом деле не о струнной represention, но вы хотите, чтобы преобразовать строку "01000" в double со значением 1.0 (или 19.999 от "19999"), вы можете просто разобрать строку вроде:

double d = double.Parse(input); 
// to represent it as the desired string again use 
string output = d.ToString("00.000"); 
+0

D'oh! Я об этом не думал! Grr! :) –

+0

Вы избили меня на 54 секунды :( – Zalomon

+0

можно увидеть, что это умное решение всеми этими быстрыми upvotes :) –

0

это немного поздно, но вы можете сделать это также с помощью Linq:

var x = String.Concat(
      input.Select(
       (c, i) => (i == 2) ? '.' + c.ToString() : c.ToString() 
      ) 
     ); 
+2

Это самый сумасшедший способ сделать это! Почему вы даже рассматриваете Linq для некоторых основных манипуляций с строкой? – DavidG

+0

Потому что я могу :-) –

+2

Я думаю, вы также можете сделать снимок экрана, напечатать это, использовать перо, чтобы нарисовать десятичную точку в нужном месте, OCR его, а затем использовать Office Interop, чтобы получить полученную строку из слова document , Шутки в сторону. LINQ - хорошая вещь, но это не всегда ответ. –

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