我有一个问题,C#没有正确计算我绘制我的进度条。
int width = 130;
int maxValue = 20;
int value = 20;
int percent = (width / maxValue) * value
现在它应该返回130,这意味着我的进度条已满,但它返回120,所以我不知道发生了什么。
此处是进度条http://imgur.com/sUbshxk
的图像我还用VB.NET测试了这个公式,它运行得很好。
我在Windows 7 x86中使用VS2013。
答案 0 :(得分:3)
130 / 20
执行integer divison
分割两个整数时,结果始终为整数。对于 例如,7/3的结果是2
这就是为什么它总是丢弃小数部分并返回6
。这就是为什么您的结果6 * 20
等于120
。
作为解决方案,您可以将整数除法更改为浮点除法。
例如;
var percent = (130.0 / 20) * 20;
var percent = (130 / 20.0) * 20;
这意味着,您需要将某个变量定义为double
,或在计算中将其中一个变为double
。
答案 1 :(得分:1)
您需要将值转换为double:
int percent = (int)(((double)width / (double)maxValue) * (double)value);
130 / 20 = 6.5
,它会被隐含地转换为integer
,这会使6
成为{{1}}。因此,错误的值用于以下乘法
答案 2 :(得分:1)
由于您要分割两个int
个变量,因此您需要执行整数除法。
130/20是6.5,在整数上下文中被截断为6.然后乘以20,生成120的结果。
通过将变量定义为double
s:
double width = 130;
double maxValue = 20;
double value = 20;
double percent = (width / maxValue) * value;
答案 3 :(得分:0)
在大多数编程语言中,将整数除以整数始终会产生整数。
如果您不想要整数结果,请确保至少有一个操作数是float或double:
int width = 130;
float maxValue = 20.0;
int value = 20;
int percent = (width / maxValue) * value