C#判断文本框十进制数值是否在指定范围功能失效问题求助
问题根因
- 核心错误是用字符串比较替代数值比较:
TxtFullScale.Text是字符串类型,直接用>=、<=、==判断时,是按逐字符的ASCII码顺序比较,不是按十进制数值的大小逻辑判断。你修改后的代码只写了两个固定字符串的相等判断,自然只能匹配3.0031、2.9970这两个固定输入,3.0032这类其他超范围值不会命中判断。 - 原有代码的
ToString用法完全错误:TxtFullScale.Text.ToString("3.0031")是无效写法,字符串类型的ToString方法不支持传入数值作为参数,你这里是想把3.0031、2.9970作为阈值和输入值比较,用错了API。 - 你已经通过
double.TryParse把输入转成了数值类型的value变量,直接用这个变量做数值区间判断即可,不需要绕回操作字符串。
修复后代码示例
double value = 0; // 先校验输入是否是合法数值 if (!double.TryParse(TxtFullScale.Text, out value)) { MessageBox.Show("请输入合法的数值"); return; } value /= 10000; TxtCalFullScale.Text = string.Format("{0:#.0000}", value) + " mV/V"; // 直接用解析后的数值做区间判断 const double upperLimit = 3.0030; const double lowerLimit = 2.9970; if (value > upperLimit || value < lowerLimit) { MessageBox.Show("Full Scale value is in a non conformence state."); }
额外注意
如果对精度要求很高,不建议用double类型,改用decimal类型做数值解析和比较,避免浮点精度误差。
内容的提问来源于stack exchange,提问作者Camp Nerd
相关产品推荐
相关产品推荐

