конвертировать из int в двойной - PullRequest
0 голосов
/ 25 ноября 2011

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

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

Тем не менее,

Hours.Duration =  (Hours.Duration) / 3600

работает нормально и округляется до int. Что я делаю не так?

Ответы [ 4 ]

2 голосов
/ 25 ноября 2011
decimal p = ((Hours.Duration) / 3600);
(Hours.Duration) = p;

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

(Hours.Duration) = (int)p;

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

1 голос
/ 25 ноября 2011

Попробуйте:

Hours.Duration = Convert.ToInt32(p);
0 голосов
/ 16 июля 2014

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

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

Вот очень удобная веб-страница с типом данных для преобразования: Преобразование десятичного числа в int в C #

0 голосов
/ 25 ноября 2011

Не определяйте 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);

...