2013-04-19 3 views
1

Я ищу руководство, может ли кто-нибудь помочь мне?Попытка отделить целые числа и десятичные числа asp.net C#

Мне нужно разделить значение продолжительности на целое число и десятичное число.

EDIT: У меня есть текстовое поле на одной странице. Если кто-то входит в 1.5, и он хранится в длительности, я хотел бы получить это на другой странице, и я хотел бы сохранить все число в текстовом поле, а десятичное число выберет значение из раскрывающегося списка на основе ответа.

Извините, но дважды добавил случайность.

context.Response.Write(dr["Title"].ToString() 
    + '|' + dr["CourseId"].ToString() + '|' + dr["duration"].ToString() 
+ '|' + dr["Code"].ToString() + '|' 
    + dr["Category"].ToString() + School.NewLine); 
+0

А? Вы хотите, чтобы вы приняли десятичное число и разделили десятичное и целое число? – tnw

ответ

3
var duration = dr["duration"].ToString().Split(CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator); 
int durationWhole = Int32.Parse(duration[0]); 
int durationDecimal = Int32.Parse(duration[1]); 

Продолжительность будет строка массива. duration [0] является частью числа перед десятичной точкой, а длительность [1] - это часть после.

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

Основываясь на изменении в вашем вопросе, я обновил ответ, чтобы дать вам численные результаты. Теперь вы можете использовать числа или строки по мере необходимости.

+4

Это будет работать там, где культура 'en' в любом случае. Если приложение является глобальным или в другой стране, то, вероятно, лучше всего использовать [NumberDecimalSeparator] (http://msdn.microsoft.com/en-us/library/system.globalization.numberformatin.numberdecimalseparator.aspx). –

+0

Хороший звонок. Я был в процессе обновления моего ответа, чтобы включить это, когда меня вызвали на работу. – Chris

+0

Я получаю сообщение об ошибке, когда я помещаю это. CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator Имя cultinfo не существует в текущем контенте. – user2208126

0
context.Response.Write(dr["Title"].ToString() 
    + '|' + dr["CourseId"].ToString() + '|' + dr["duration"].ToString().Split('.')[0] 
    + '|' + dr["duration"].ToString().Split('.')[1] + '|' + dr["Code"].ToString() + '|' 
    + dr["Category"].ToString() + School.NewLine); 
+1

Я бы не стал разделять строку дважды. Легче разделить его один раз, а затем использовать отдельные части. Вы также не учитываете глобальное использование, поскольку не все страны используют этот период в качестве разделителя десятичных чисел. – Chris

+0

Я получаю эту ошибку. Индекс находился вне границ массива. – user2208126

0

Вы можете использовать подстроки и IndexOf:

{ context.Response.Write(
    dr["Title"].ToString() + '|' + 
    dr["CourseId"].ToString() + '|' + 
    dr["duration"].ToString().Substring(0, dr["duration"].ToString().IndexOf(".")) + '|' + 
    dr["duration"].ToString().Substring(dr["duration"].ToString().IndexOf("."), dr["duration"].ToString().Length()) + '|' + 
    dr["Code"].ToString() + '|' + 
    dr["Category"].ToString() + 
    School.NewLine); 
} 
8

Если значение, которое вы пытаетесь разделить это число, попробуйте следующее:

decimal number = 12.34; 
int wholePart = decimal.Truncate(number); 
decimal fractionPart = number - wholePart; 

Если это строка, CLandry-х ответ должен работать, продолжительность [0] была бы всей частью, а продолжительность [1] была бы частью доли.

+1

Хорошая информация. Я не чувствовал себя комфортно, давая эту информацию в своем ответе, так как я не мог сказать тип продолжительности вопроса. Почувствуйте себя безопаснее, чтобы рассматривать его как строку. – Chris

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