0

dis.text = 2、prc.text = 100、これらのコードを使用しているとします。net_prc.text = 98 のはずですが、-100 になっています。理由を教えてください。パーセンテージ??

 private void net_prcTabChanged(object sender, EventArgs e)
    {
        int d;
        int di;
        int i;
        d = Convert.ToInt32(dis.Text);
        i = Convert.ToInt32(prc.Text);
        di = -((d / 100) * i) + i;
        net_prc.Text = di.ToString();
    }
4

6 に答える 6

1

di = -((d / 100) * i) + i;

このステートメントのすべての値は整数です。小数点以下の桁数で算術演算を行う予定であり、変数の精度を double または float に上げる必要があります。代わりに、式の値の 1 つに小数点以下の桁数を追加します。これにより、すべての値が double になります。

これは、算術昇格と呼ばれるプロセスです。実行時に、方程式内のすべての変数の精度が最も正確な変数のサイズまで増加します。

于 2013-03-03T19:16:08.890 に答える
1

(d / 100.0) を試して、浮動小数点演算を使用するように強制します

于 2013-03-03T19:17:11.633 に答える
0

それを行う適切な方法は、のデータ型をに変更することdiですfloat

di = (d * 100) / i;
于 2013-03-03T19:16:13.510 に答える
0

C# には、数値が整数としてキャストされるため、数学を行う奇妙な方法があり、整数演算しか実行できません。最初に float または double として持つ必要があるため、float 計算または計算内で小数点以下の桁数を必要とするものをすべて実行できます。

于 2013-03-03T19:16:20.517 に答える
0

偶数 dis.text = 1.5

private void net_prcTabChanged(object sender, EventArgs e)
    {
        double d;
        double di;
        double i;
        d = Convert.ToDouble(dis.Text);
        i = Convert.ToDouble(prc.Text); 
        di = -((d * 100.0) / i ) + i;
        net_prc.Text = di.ToString();
    }
于 2013-03-03T20:29:17.880 に答える
-1

あなたの除算d / 100は整数の除算であり、整数、おそらく0(ゼロ) を返します。これは確かにあなたの例に当てはまりますd = 2

追加:(他の多くの回答が推奨するように変更するのではなく)整数でこれを本当にやりたい場合は、部分式を変更することを検討しdecimalてくださいdouble

((d / 100) * i)

の中へ

((d * i) / 100)

最後の操作として除算を行うと、精度が向上するためです。あなたの例の数字d=2と、最初の部分式はori=100を与えますが、変更された部分式はwhich になります。ただし、最も近い整数に丸めることはできません。代わりに、切り捨てが行われます (小数部分は に近いかどうかに関係なく破棄されます)。0*1000200/10021

于 2013-03-03T19:16:05.757 に答える