Вычисление значения и округление до ближайшего целого числа - PullRequest
0 голосов
/ 21 ноября 2011

Я пытаюсь вычислить число ниже.Я продолжаю получать 0, когда это должно быть что-то вроде 83.12454.

Я считаю, что я хочу Double тип переменной.Что я делаю не так ниже?Как только я получу значение, мне нужно обрезать десятичную дробь.

Ratings GetNoVotes = new Ratings();
int DATotalYesVotes = GetNoVotes.GetTotalNOVotes(1, yesPictureId); //80
int DaTNoVotes = GetNoVotes.GetTotalNOVotes(2, yesPictureId);      //15
int DaTotalVotes = DATotalYesVotes + DaTNoVotes;                   //95

double Percentage = (DATotalYesVotes / DaTotalVotes)*100;          //84.2105
// Math.Round(Percentage);
TotalyesVotes.Text = Percentage.ToString();

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Проблема в том, что DATotalYesVotes на целое число меньше, чем DaTotalVotes.Поскольку / означает целочисленное деление, оно округляется до умножения на 100. Вот два подхода:

(1) Сначала умножить на 100 (все еще некоторая ошибка округления - но не сильно)

double Percentage = (DATotalYesVotes * 100 / DaTotalVotes); 

(2) Сначала приведение к удвоению

double Percentage = ((double)DATotalYesVotes / (double)DATotalVotes)*100;
2 голосов
/ 21 ноября 2011

Вам нужно преобразовать DATotalYesVotes и DaTotalVotes, чтобы удвоить их перед делением:

double Percentage = ((double)DATotalYesVotes / (double)DaTotalVotes)*100.0; 

В противном случае деление 2-х int приведет к 3-му (и усеченному) int.

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

Целочисленное деление дает целочисленный результат нуля, затем вы умножаете его на 100. Попробуйте привести к удвоению для одного из чисел.

double Percentage = ((double)DATotalYesVotes / DaTotalVotes)*100;     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...