Установить значение для индикатора выполнения в xamarin - PullRequest
0 голосов
/ 20 июня 2019

У меня есть значение поля, поступающего с сервера от 1 до 100, которое показывает прогресс в этом поле. Но я проверил, что мы можем указать значение индикатора выполнения от 0 до 1. Как я могу преобразовать это. Я сделал что-то подобное, но не сработало

Int Field = 12; 
Decimal d = Field / 100; 
Decimal dc = Math.Round(d,1); //to round to one decimal place 
return dc;

Это возвращает 0. Я тоже это попробовал:

double d = (double)(Progress / 100);
double dc = Math.Round(d, 1); 
return dc;

Это также возвращает 0.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Оказывается, оператор "/" не работает в C #

NO, "/" оператор работает в C #.

Вы получаете ноль, потому что Field / 100; равно int/int, результат равен 0;

Progress / 100 - то же самое, int/int получить 0;

Чтобы ваш код работал. Вы можете определить поле как тип Decimal:

    Decimal Field = 12;
    Decimal d = Field / 100;
    Decimal dc = Math.Round(d, 1);

Или приведите 100 к Decimal:

   int Field = 12;
   Decimal d = Field /(Decimal)100;
   Decimal dc = Math.Round(d, 1);

Подробный ответ вы можете увидеть в следующих двух потоках: почему-то-целое-деление-в-диез-верните-а-целое-а-не-поплавок

и

как-кан-я-разделяй два целых к получить-а-двойной

1 голос
/ 20 июня 2019

Если вы хотите максимальной точности, вы можете преобразовать старый диапазон значений в новый диапазон, поддерживая соотношение по следующей формуле:

var OldRange = (OldMax - OldMin);  
var NewRange = (NewMax - NewMin);  
//i'm using round here has you requested, but its better to dont use it to achieve best results
var NewValue = Math.Round(((OldValue - OldMin) * NewRange) / OldRange) + NewMin, 1);

В вашем случае, например, для числа 12 это будет:

var OldRange = 99 //(100 - 1);  
var NewRange = 1 //(1 - 0);  
var NewValue = Math.Round(((12 - 1) * NewRange) / OldRange) + 0, 1);

Заключение числа 12 в старом диапазоне равно 0,1 в новом диапазоне.

Или, если вам все равно, что старый диапазон начинается с 1, а новый с 0, вы можете просто разделить на 100 и округлить значение:

Int field = 12; 
Decimal d = field / 100; 
Decimal dc = Math.Round(d,1); //to round to one decimal place 
return dc;

Обратите внимание, что в c # оператор деления равен / , а не% (который является модулем)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...