如何解决C#中读取计算结果赋值的textBox时出现输入字符串格式不正确错误
问题修复方案
1. 修复逻辑运算符错误
原代码中条件判断用了位与运算符&,应该替换为逻辑与&&,否则会出现非预期的条件判断结果,导致textBox66.Text未被正确赋值(为空或默认值),触发转换错误。
修正后的条件代码:
else if (2.8 < fsF && fsF <= 3)
2. 统一数值与字符串转换的区域格式
ToString()和Parse方法默认使用当前系统的区域设置,部分区域的小数点标识为逗号而非点,会导致格式不匹配。转换时指定固定的CultureInfo即可规避该问题,使用不随系统区域变化的固定文化配置即可。
赋值时的代码修正:
textBox66.Text = ((((0.8 * fF + 0.7) - (0.8 * fF + 0.67)) * (fsF - 2.8) / 0.2) + (0.8 * fF + 0.67)).ToString(System.Globalization.CultureInfo.InvariantCulture);
读取转换时的代码修正:
var w0 = Convert.ToDecimal(float.Parse(textBox66.Text, System.Globalization.CultureInfo.InvariantCulture));
3. 增加空值/非法值校验
避免textBox66.Text为空、或者包含非数值内容时触发异常,可以增加安全校验逻辑:
if (float.TryParse(textBox66.Text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out float textBoxValue)) { var w0 = Convert.ToDecimal(textBoxValue); var wdesain = Convert.ToDouble(w0 * F * web00 / 1000); // 后续正常业务逻辑 } else { // 非法值处理逻辑,比如给w0赋默认值、提示计算异常 }
4. 可选优化:避免来回转换
如果逻辑允许,直接把计算出来的数值存到变量里复用,不需要通过TextBox的Text属性中转,完全规避字符串转换的问题:
// 先存数值变量 double calculateResult = ((((0.8 * fF + 0.7) - (0.8 * fF + 0.67)) * (fsF - 2.8) / 0.2) + (0.8 * fF + 0.67)); // 同时赋值给控件和后续计算用 textBox66.Text = calculateResult.ToString(System.Globalization.CultureInfo.InvariantCulture); var w0 = Convert.ToDecimal(calculateResult); var wdesain = Convert.ToDouble(w0 * F * web00 / 1000);
内容的提问来源于stack exchange,提问作者gea ihza
相关产品推荐
相关产品推荐

