我在谷歌上面看了很多,但它没有任何问题,看起来真的好像是针对我遇到的问题所以我在这里发帖看看你们是否知道这是怎么回事下面的代码示例我已经发布在这个论坛上,所以是的。
您好。我有一个最小数字(3200)和一个最大数字(4000),然后是第三个数字(3663),我试图获得第三个数字在最小数字和最大数字之间的进展。
我会用更好的术语解释它,我的水平有xp计数。我正在努力将进展提升到一个新的水平。
原始[C#]:(3663 - 3200) / (4000 - 3200) * 100
代码:
int progression = (newXp - Convert.ToInt32(currentGrade["grade_xp_needed"])) / (Convert.ToInt32(newGrade["grade_xp_needed"]) - Convert.ToInt32(currentGrade["grade_xp_needed"])) * 100;
为什么它会返回0%,但我还有300或者什么XP要去?我已经在PHP中使用它并且它返回57%
PHP代码:
$progression = round(($currentXp - $currentGrade->grade_xp_needed) / ($nextGrade->grade_xp_needed - $currentGrade->grade_xp_needed) * 100, 1);
答案 0 :(得分:0)
您需要将值转换为十进制才能获得正确的除法结果。然后你可以将整个方程的结果转换回整数。
int progression = (int)((newXp - Convert.ToDecimal(currentGrade["grade_xp_needed"]))
/ (Convert.ToDecimal(newGrade["grade_xp_needed"])
- Convert.ToDecimal(currentGrade["grade_xp_needed"])) * 100);
在C#中,int
除以int
会产生int
。
答案 1 :(得分:0)
由于您正在执行整数计算,因此得到错误的结果。
将分子或分母中的任何一个作为浮点运算,它将起作用。
int progression = (int) ((1.0*(newXp - Convert.ToInt32(currentGrade["grade_xp_needed"]))) / (Convert.ToInt32(newGrade["grade_xp_needed"]) - Convert.ToInt32(currentGrade["grade_xp_needed"])) * 100);
希望这有帮助。
答案 2 :(得分:0)
你必须使用double而不是整数。 有关示例代码和输出,请参阅this link。
public static void Main()
{
double low = 3200;
double high = 4000;
double xp = 3663;
double progression = (xp - low) / (high - low) * 100;
Console.WriteLine(progression + "%");
}