C#,运算符’*’不能应用于’double’和’decimal’类型的操作数

这个错误应该是一个简单的错误,但我似乎无法使它工作。 问题在于,这个相同的代码在程序的早期工作。 我没有看到任何理由在这个实例上发送错误而不是之前的四个错误。 参考下面的代码,随意提供任何批评,因为它应该让我更好。 如果重要,我正在使用Sharp Develop 2.2。

以下是有效代码示例:

void calc2Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(tb2_fla.Text) & String.IsNullOrEmpty(tb2_e.Text) | String.IsNullOrEmpty(tb2_fla.Text) & String.IsNullOrEmpty(tb2_e.Text) | String.IsNullOrEmpty(tb2_e.Text)) { MessageBox.Show("Enter either kVA and Voltage or FLA and Voltage", "Invalid Data Entry", MessageBoxButtons.OK); } if (!String.IsNullOrEmpty(tb2_kva.Text) & !String.IsNullOrEmpty(tb2_e.Text)) { decimal x, y, z; x = decimal.Parse(tb2_kva.Text); y = decimal.Parse(tb2_e.Text); z = (x * 1000) / (1.732050808m * y); //the m at the end of the decimal allows for the multiplication of decimals tb2_fla.Text = z.ToString(); tb2_fla.Text = Math.Round(z,2).ToString(); } else { if (!String.IsNullOrEmpty(tb2_fla.Text) & !String.IsNullOrEmpty(tb2_e.Text)) { decimal x, y, z; x = decimal.Parse(tb2_fla.Text); y = decimal.Parse(tb2_e.Text); z = (x * y * 1.732050808m) / 1000; //the m at the end of the decimal allows for the multiplication of decimals tb2_kva.Text = Math.Round(z,2).ToString(); } 

以下是在此post的主题行中发送错误的代码示例:

 void Calc4Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(tb4_fla.Text) && String.IsNullOrEmpty(tb4_e.Text) || String.IsNullOrEmpty(tb4_kw.Text) & String.IsNullOrEmpty(tb4_e.Text) || String.IsNullOrEmpty(tb4_e.Text)) { //If values are entered improperly, the following message box will appear MessageBox.Show("Enter either FLA and Voltage or kW and Voltage", "Invalid Data Entry", MessageBoxButtons.OK); } if (!String.IsNullOrEmpty(tb4_fla.Text)&& !String.IsNullOrEmpty(tb4_e.Text)&& String.IsNullOrEmpty(tb4_kw.Text)) {//If the user eneters FLA and Voltage calculate for kW decimal x, y, z; x = decimal.Parse(tb4_fla.Text); y = decimal.Parse(tb4_e.Text); z = (x*y)*(.8 * 1.732050808m); tb4_kw.Text = Math.Round(z,0).ToString(); } if (!String.IsNullOrEmpty(tb4_kw.Text) && !String.IsNullOrEmpty(tb4_e.Text) && String.IsNullOrEmpty(tb4_fla.Text)) {;//If the user enters kW and Voltage calculate for FLA decimal x, y, z; x = decimal.Parse(tb4_kw.Text); y = decimal.Parse(tb4_e.Text); z = (1000 * x)/(y * 1.732050808m)* .8; tb4_fla.Text = Math.Round(z,0).ToString(); } } 

我感谢任何帮助。 谢谢。

 .8m instead of .8 

你没有说它是哪一行,但我打赌这两个:

 z = (x*y)*(.8 * 1.732050808m); 

和:

 z = (1000 * x)/(y * 1.732050808m)* .8; 

请注意,您的.8没有’m’限定符。 我看到你提供的每个其他地方都提供了这个。

在这一行:

z =(x y) (。8 * 1.732050808m);

你指定.8作为文字,但没有’m’后缀,文字指定一个双精度。

z =(x y) (。8m * 1.732050808m);

会解决它。