C# 数学语句在部分执行时不起作用

本文关键字:执行 不起作用 语句 | 更新日期: 2023-09-27 17:56:12

我想知道这是否可能是某种关联性问题,因为当我在纸上做题时,我得到了正确的答案,但是当我运行代码时,我一遍又一遍地得到 4。这是代码。为什么这些不平等?我错过了什么?

整个问题(每次迭代返回 4

):
for (int x = 1; x <= stackCount; x++) {
            temp = ((x - 1) / stackCount * uBound) + lBound + 1;
            Base[x] = Top[x] = Convert.ToInt32(Math.Floor(temp));
        }

破碎成碎片(正确运行):

double temp, temp1, temp2, temp3, temp4;
        for (int x = 1; x <= stackCount; x++) {
            temp1 = (x - 1);
            temp2 = temp1 / stackCount;
            temp3 = temp2 * uBound;
            temp4 = temp3 + lBound + 1;
            Base[x] = Top[x] = Convert.ToInt32(Math.Floor(temp4));
        }

添加:是的,对不起,我忘记了声明:

//the main memory for the application
    private string[] Memory;
    //arrays to keep track of the bottom and top of stacks
    private int[] Base;
    private int[] Top;
    //keep track of the upper and lower bounds and usable size
    private int LowerBound;
    private int UpperBound;
    private int usableSize;

我也认为我倒退了。我认为,如果您在整数的除法运算中使用双精度数,则结果将是双精度数,但事实似乎并非如此。这是有道理的!谢谢大家!

C# 数学语句在部分执行时不起作用

推测:stackCountuBoundlBound都是整数或长整型。

结果:整个表达式的计算就像在执行整数算术一样。

解决方案:temp = ((double)(x -1) / stackCount * uBound) + lBound + 1;

你还没有给我们完整的代码。特别是stackCountuBoundlBoundtemp的声明都被省略了。您还省略了前 3 个的值。

如果,似乎很有可能,你的表达中涉及的所有位

((x - 1) / stackCount * uBound) + lBound + 1;
是整型类型

,结果也将是整型类型,因为执行了整数除法:

int    x = 9 ;
int    y = 4 ;
double z = x / y ;

生成预期的双精度值2.0

((5 - 1) / 9 * 11) + 3 + 1
表达式解析为

两个的特定整型类型取决于所涉及的各种类型以及它们是否经过签名,以及它们是否都兼容。