2

単純な方程式を解こうとすると問題が発生します。私の方程式は、学生のマークのパーセンテージを見つけることです. これは私のコードです:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace thered_Try
{
    public partial class Form1 : Form
    {
        decimal res;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int oneee = 300;
            int two = 1000;
            int thee = 10;
            res = (oneee / two) * 10;
            label1.Text = res.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.ShowDialog();
        }
    }
}

結果は 0 です。私の間違いはどこですか?

4

6 に答える 6

2

2 つの整数の間で除算を実行しています。つまり、結果も整数として計算されます。300 / 1000 は 0 です...そして、これに 10 を掛けますが、それでも 0 です。

オプション:

  • 浮動小数点演算を使用します。これを行うには、すべての変数を作成するdoubleか、次のようにキャストします。

    ret = (int) ((oneee / (double) two) * 10);

    decimal(またはなどの他の浮動小数点型も機能しfloatます。場合によっては、結果がわずかに異なる場合があります。)

  • 最初に 10 を掛ける:

    res = (oneee * 10) / two;
    

パーセンテージの場合は、10 ではなく 100 を乗算する必要があることに注意してください。整数の結果のみが必要で、乗算がオーバーフローしないことがわかっている場合は、最初に乗算する方がおそらく浮動小数点を使用するよりも簡単です。

また、このようなことをすばやく試すには、Windows フォームよりもコンソール アプリを使用する方がはるかに簡単です。これが機能することを示す完全な例を次に示します。

using System;
class Test
{
    static void Main()
    {
        int oneee = 300;
        int two = 1000;
        int res = (oneee * 10) / two;
        Console.WriteLine(res); // 3        
    }
}

p編集: format specifierを使用するつもりだった場合は、代わりに浮動小数点数を使用する必要があります:

int marksScored = 300;
int marksAvailable = 1000;
double proportion = ((double) marksScored) / marksAvailable;
string text = proportion.ToString("p1"); // "30.0%"

除算演算子の 1 つのオペランドのみが - である必要があることに注意しdoubleください。

于 2012-12-25T08:27:30.957 に答える
0
you are using int and when you are dividing it by 

(1000/300) it will result 0.3. But the data type is int, so result is 0;

Please use below code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace thered_Try
{
    public partial class Form1 : Form
    {
        decimal res =0;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            decimal oneee = 300;
            decimal two = 1000;
            decimal thee = 10;
            res = (oneee / two) * 10;
            label1.Text = res.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.ShowDialog();
        }
    }
}

Thanks, Let me know your result. 
于 2012-12-25T12:35:40.177 に答える
0

すべてのCベースのプログラミング言語 ( などC#) では、式で使用される最高の型に基づいて操作が評価されます。したがって、2 を乗算する場合integers、コンパイラは乗算を使用しますが、aとintegera を乗算する場合、コンパイラは乗算を使用します。あなたの場合、コンパイラが除算を使用するように 2 つの sを除算します。floatintegerfloatintegerinteger

問題を解決するには、数値の 1 つを に変換する必要がありますfloat。これはさまざまな方法で行うことができます。ここにいくつかあります:

res = ((float) oneee / two) * 10;
res = ((double) oneee / two) * 10;
于 2012-12-25T08:27:40.383 に答える
0

整数で作業しているため、結果も整数であり、0.3 は 0 になります。代わりに double を使用するか、計算の前に double にキャストする必要があります。

于 2012-12-25T08:28:17.260 に答える
0

これを試して:

private void button1_Click(object sender, EventArgs e)
        {
            decimal oneee = 300;
            decimal two = 1000;
            decimal thee = 10;
            decimal aResult = (oneee / two) * 10;
            label1.Text = aResult.ToString("0.00");
        }
于 2012-12-25T08:28:37.610 に答える
0

結果のタイプは、使用される変数によって異なります。

2 の間の数値演算はint、 を返しますint
数学演算を行う前に、そのうちの 1 つを 10 進数にキャストする必要があります。

 res = (oneee / (decimal)two) * 10;
于 2012-12-25T08:28:53.780 に答える