在Xamarin中设置进度栏的值

时间:2019-06-20 20:00:36

标签: xamarin xamarin.forms progress-bar

我具有一个值,该值来自服务器l从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 个答案:

答案 0 :(得分:1)

如果要获得最大精度,可以使用以下公式将旧值范围转换为新范围,以保持比率:

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#中,除法运算符为 / ,而不是%(模数是wich)

答案 1 :(得分:1)

  

结果是“ /”运算符在C#中不起作用

否,“ /”运算符确实在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);

您可以在以下两个线程中看到详细的答案:why-does-integer-division-in-c-sharp-return-an-integer-and-not-a-float

how-can-i-divide-two-integers-to-get-a-double