2011-11-25 6 views
0

У меня есть целое число (представляющее секунды), которое я конвертирую в часы, деля на 3600. Затем я сохраняю значение в свойстве (тип int). Если значение содержит десятичную точку, я конвертирую ее путем литья. Однако, когда я пытаюсь назначить значение для свойства, я получаю сообщение об ошибке: «Невозможно неявно преобразовать тип« десятичный »в« int ». Вот мой код:конвертировать из int в double

var p = ((Hours.Duration)/3600.0); 
(Hours.Duration) = p; 

Однако

Hours.Duration = (Hours.Duration)/3600 

работает отлично, и патронов к int. Что я делаю не так?

+1

Какой язык? – ThomasW

+0

Аналогичный вопрос [здесь] (http://stackoverflow.com/questions/501090/c-sharp-how-do-i-convert-a-decimal-to-an-int) – abhinav

+0

Я использую C# .... – Premanshu

ответ

2
decimal p = ((Hours.Duration)/3600); 
(Hours.Duration) = p; 

вы получаете сообщение об ошибке, потому что p дробная и Hours.Duration является целым числом, Вы не можете присвоить десятичной в целое без явного кастинга.

(Hours.Duration) = (int)p; 

Если Hours.Duration является integer, 3600 также целое число, то будет целочисленное деление, то есть ваше десятичное значение будет потеряно. например в целочисленном делении 7/2 =3. Если вы хотите, чтобы ответ был равен 3,5, то вам нужно иметь по крайней мере одно десятичное число в разделе i.e 7.0/2 = 3.5 ИЛИ 7/2.0 = 3.5.

+0

if Hours.Duration = 1800, затем p = 0.5 .. но как снова назначить это значение часам. При явном преобразовании в строке 2 Convert.ToDecimal ((Hours.Duration)) = p; Ошибка говорит, что lhs присваивания должен быть переменной, свойством, индексом. – Premanshu

+0

Каков тип Hours.Duration? @Premanshu – Zohaib

+0

Тип int .. – Premanshu

0

Не определяйте p как десятичное. И вопрос в том, что вы хотите включить также частичный час (например, если результат для 4000/3600 будет 1 или 2). Поэтому вы можете напрямую написать

Hours.Duration/= 3600;

или если вы хотите посчитать также частичный час

Hours.Duration = Hours.Duration/3600 + ((Hours.Duration% 3600> 0) 1: 0);

или если вы хотите правильно округление до

Hours.Duration = Hours.Duration/3600 + ((Hours.Duration% 3600> = 1800) 1: 0);

+0

Спасибо @Ivo ... так как Hours.Duration получается int, поэтому добавление десятичной части все равно приведет к ошибке. Большое спасибо за ответ, хотя. – Premanshu

+0

Час. Длительность будет 1, принята. Но как насчет десятичной части? Идеально 4500 будет приводить к 4500/3600 = 1,25 , так откуда же мы добавим десятичную часть (900 секунд оставшегося после разделения) ??? Я думаю, мы не можем присвоить десятичные значения типам int после кастинга. Любая литература, несомненно, мне поможет. Цените свою заботу. Спасибо Ivo – Premanshu

+0

Если вам нужно показать десятичную часть, вам определенно нужно изменить тип Hours.Duration. Или подумайте о часах: минуты: секунды. –

0

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

int vIn = 0; 
double vOut = Convert.ToDouble(vIn); 

Вот это очень удобно преобразовать тип данных веб-страница для тех, других: Convert decimal to int in C#

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