我有http://deck.net/4488411c38b84b496a79f7eafb877a25,当我输入第3条时,编号为200.它不能生成整个内容。我想要它,并想知道是否有任何阻止这种情况发生?
我正在使用Bridge,所以这里是我的桥码:
context.BeginPath();
context.MoveTo(pos.X, pos.Y);
for (int n = 0; n < nShapes; n++)
{
for (int n2 = 0; n2 < sides; n2++)
{
pos.X += (Math.Sin(direction * (Math.PI/180)) * sidesLength);
pos.Y += (Math.Cos(direction * (Math.PI/180)) * sidesLength);
context.LineTo(pos.X, pos.Y);
direction += (360 / sides);
direction %= 360;
}
direction += 360/nShapes;
}
context.Stroke();
}
这是javascript:
context.beginPath();
context.moveTo(pos.x, pos.y);
for (var n = 0; n < Demo.Program.nShapes; n = (n + 1) | 0) {
for (var n2 = 0; n2 < Demo.Program.sides; n2 = (n2 + 1) | 0) {
pos.x += (Math.sin(direction * (Math.PI / 180)) * sidesLength);
pos.y += (Math.cos(direction * (Math.PI / 180)) * sidesLength);
context.lineTo(pos.x, pos.y);
direction += ((((Bridge.Int.div(360, Demo.Program.sides)) | 0))) | 0;
direction %= 360;
}
direction += (Bridge.Int.div(360, Demo.Program.nShapes)) | 0;
}
context.stroke();
Bridge.Int.div是int(s)的c#的除以等价。
答案 0 :(得分:1)
问题在于您使用的类型。 sides
和nShapes
是整数,direction
是double
,因此当您添加direction += 360 / nShapes
时,类型转换直到右侧完成后才会发生。 360/200 = 1.8
但是当您使用int时,实际结果为360/200 = 1
,因此您无法完成360,但仍可获得200个形状。
要解决此问题,只需确保右侧的正确类型。
direction = 360/(double)nShapes; // Just need one double to force right
// side to the correct type
或另类首选方式
direction = 360.0/nShapes; // adds without rounding down
.0
强制该值为float
(在c#的情况下为double
),因此该行的右侧现在具有正确的类型且没有舍入错误。