我有一个来自服务器列表的从1到100的字段的值,用于显示该字段的进度。但我检查了一下,我们可以从0 to1向进度条提供值。我怎么才能把这个。我做了这样的事情,但没有起作用
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。
发布于 2019-06-21 04:16:50
如果您希望获得最大精度,可以将旧值范围转换为新范围,并使用以下公式保持比率:
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#中,除法运算符是/,而不是%(即模数)
发布于 2019-06-21 13:41:47
发现"/“运算符在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);
和
https://stackoverflow.com/questions/56693096
复制相似问题