Может быть, я провел слишком много ночей до конца, но я имел следующий код:Почему это возвращается 0?
MessageBox.Show(
Convert.ToInt32(
Math.Round(
(double)((i+1)/r.Count)*100 ,
0
)
).ToString()
);
Который всегда возвращает 0, даже когда i=120000
и r.Count=150000
. Это простой расчет прогресса, где i
- текущая итерация в цикле, а r
- это коллекция (List()).
Я отделил код, и даже следующий по-прежнему возвращает 0:
Convert.ToInt32(
Math.Round(
(double)((120000+1)/167428)*100
, 0)
)
Не уверен, что происходит здесь, так что любое представление о том, что я делаю неправильно (возможно, лоб Slapper). Оно должно быть (с использованием выше цифр), возвращающая 71.
@ флаг Хабиба как дубликат:
что дублируют вы утверждаете - на самом деле разные, даже решения не применяются здесь, как это было вопрос о литье, чтобы удвоить, и , не добавляя 'm' с добавочными десятичными точками к каждой переменной в play.
так, что вы, ребята, говорите (чтение ответов ниже), является то, что мне нужно отливать целые числа как удвоить первый, и что .NET не выполняет никакой магии при использовании математических операций (например, плавать число, если при необходимости делить два целых числа)? –
нет только кастинг один сделаю, но сделайте это перед тем дивизия не после. –
@SanuelJackson Он не может догадаться, чего вы хотите, а в некоторых случаях целое деление * - это то, что вы хотите. Нет, это не волшебство. – Borgleader