比较数字范围内的小数
Posted
技术标签:
【中文标题】比较数字范围内的小数【英文标题】:Comparing a Decimal within a Number Range 【发布时间】:2021-11-07 04:33:09 【问题描述】:好的,我遇到了问题。我在一个文本框中有一个小数点,我试图在一个设定的数字之间进行范围。正如您在图片中看到的,我有一个全刻度值,它使用十进制 2.9995 mV/V 更新 CalCert 上的值。
这里的问题是十进制值必须是 3 mV 的正/负 30。例子。 2.9970 - 3.0030
那是范围。超出范围的任何内容我都需要它来触发警告对话框。我将要使用的代码我不确定为什么它不起作用。
我正在使用 if 语句,但唯一的错误是在 ("3.0031") 部分。
double value = 0;
if (double.TryParse(TxtFullScale.Text, out value))
value /= 10000;
TxtCalFullScale.Text = string.Format("0:#.0000", value) + " " + "mV/V";
if (TxtFullScale.Text >= TxtFullScale.Text.ToString("3.0031"))
MessageBox.Show("Full Scale value is in a non conformence state.");
else if (TxtFullScale.Text <= TxtFullScale.Text.ToString("2.9970"))
MessageBox.Show("Full Scale value is in a non conformence state.");
我可以使代码工作到一定程度
if (TxtFullScale.Text == "3.0031")
MessageBox.Show("Full Scale value is in a non conformence state.");
else if (TxtFullScale.Text =="2.9970")
MessageBox.Show("Full Scale value is in a non conformence state.");
但是,如果将范围作为3.0032
放入文本中,则它永远不会显示消息框。我在这里错过了什么?
【问题讨论】:
您不能将 >= 应用于string
类型的操作数。您应该将它们转换为double
,然后您可以比较值。
@mohammad:一般来说,decimal
会比double
更好;浮点怪异的可能性较小。
【参考方案1】:
因此,首先,您不能在 C# 上对字符串进行数学运算
var a = "3";
var b = "2";
Console.WriteLine(a+b);
结果为 32!
第二,这行有点奇怪
TxtFullScale.Text >= TxtFullScale.Text.ToString("3.0031")
应该是这样的
TxtFullScale.Text >= "3.0031"
您需要将数字解析为小数,然后进行比较,如下所示:
public const double LIMIT_1 = 3.0031;
public static void Main()
var val = "3.0032";
var x = double.TryParse(val, out double dec);
if(dec >= LIMIT_1)
Console.WriteLine("yay");
【讨论】:
我会试试这个,看看我能不能让它工作。我在其他程序中尝试了不同的解决方案,但似乎没有什么对我有利。该程序适用于我工作的公司,该公司仍在运行 XP 并希望更新到 Win10,但他们使用的软件仅与 XP 兼容。所以我将我们的软件更新了整整 20 年。 它不起作用。它所做的只是在输入任何数字时触发我的消息框。 你能发布你的解决方案吗?以上是关于比较数字范围内的小数的主要内容,如果未能解决你的问题,请参考以下文章