-8

これで、数式への代入を処理する複雑な C# コードができました。ほぼ完璧に機能しています。ただし、方程式(x - y + 1) / zと値が与えられるとx=2 y=0 z=5、惨めにそして不可解に失敗します。

問題は、値が関数に間違って渡されることではありません。それはいいです。問題は、使用する型に関係なく、C# が 3/5=0 と見なしているように見えることです。

問題のコードは次のとおりです。

public static void TrapRule(string[] args)
    {
        // ...

        string equation = args[0];
        int ordinates = Convert.ToInt32(args[1]);
        int startX = Convert.ToInt32(args[2]);
        int endX = Convert.ToInt32(args[3]);
        double difference = (endX - startX + 1) / ordinates;

        // ...
    }

次のように渡さargsれます。

args[0] = Pow(6,[x])
args[1] = 5
args[2] = 0
args[3] = 2

(ちなみに、NCalcを使用すると、Pow()関数はそれによって評価されます-これは正常に機能します。)

結果?difference = 0.

floatを使用するときと、簡単な計算を試みるときに同じことが起こります。

Console.Write((3 / 5));

同じ結果になります。

どうしたの?

4

2 に答える 2

6

/ 演算子はそのオペランドを見て、それらが 2 つの整数であることを検出すると、整数を返します。double 値を取得したい場合は、2 つの整数のいずれかを double にキャストする必要があります。

double difference = (endX - startX + 1) / (double)ordinates;

C#リファレンスでより正式な説明を見つけることができます

于 2015-02-05T20:00:18.353 に答える
1

それらは整数と呼ばれます。整数は、数値の小数部分を格納しません。さらに、整数を別の整数で割ると、結果は依然として整数です。

したがって、整数ランドで 3 / 5 を取得すると、.6 の結果を格納できません。残っているのは 0 だけです。小数部分は常に切り捨てられ、丸められることはありません。ほとんどのプログラミング言語はこのように動作します。

このような場合はdecimal、代わりにタイプで作業することをお勧めします。

于 2015-02-05T20:01:42.643 に答える