Visual Studio中decimal类型报错:需使用'M'后缀的问题咨询
解决Visual Studio的decimal隐式转换错误及M后缀说明
首先,咱们来拆解你遇到的问题:
为什么会出现这个错误?
在C#里,像0.00、119.50这种带小数点的字面量,默认是double类型的。而你要把它赋值给decimal类型的变量decTotal,C#不允许这种隐式转换——因为double的精度范围和decimal不一样,直接转可能会丢失精度,编译器为了帮你避免这个坑,就抛出了这个提示。
'M'后缀的作用是什么?
M(或者小写m)是decimal字面量的专属标记,加在数字后面,相当于告诉编译器:“嘿,这个数是decimal类型的,不是double哦!” 这样编译器就会直接把它当作decimal处理,不需要再做可能有风险的转换,自然就不会报错了。
比如你原来的代码里:
decimal decTotal = 0.00;
要改成:
decimal decTotal = 0.00M;
同样,119.50要改成119.50M,126.30改成126.30M;100虽然整数转decimal允许隐式转换,但统一加M会让代码更规范。
你的代码还有个隐藏坑!
注意看每个if语句后面的分号:
if (chkHygienistTreatment.Checked == true) ; { decTotal = 119.50; }
这里的分号;会让if的执行块变成空语句,后面的大括号不管if条件是否成立都会执行!这会导致你的计算逻辑完全出错,得把每个if后面的分号删掉,改成这样:
if (chkHygienistTreatment.Checked == true) { decTotal = 119.50M; }
修正后的完整代码示例
private void btnCalculate_Click(object sender, EventArgs e) { decimal decTotal = 0.00M; decimal decTotalAfterDiscount; bool bolRadioChecked = false; if (chkHygienistTreatment.Checked == true) { decTotal = 119.50M; } if (chkCheckupexam.Checked == true) { decTotal += 100M; } if (chkCrecefilling.Checked == true) { decTotal += 126.30M; } // 这里可以继续补充折扣计算的逻辑 }
内容的提问来源于stack exchange,提问作者Baggins123
相关产品推荐
相关产品推荐

