比较数字范围内的小数

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 年。 它不起作用。它所做的只是在输入任何数字时触发我的消息框。 你能发布你的解决方案吗?

以上是关于比较数字范围内的小数的主要内容,如果未能解决你的问题,请参考以下文章

将EditText过滤器设置为自定义范围内的数字

0093 数字型 Number:整数小数 数字型进制数字型范围数字型三个特殊值

将一个范围内的数字转换为另一个范围内的数字[重复]

ORACLE 如何产生一个随机数

如何在 HSQLDB 中生成一个范围内的数字行列表?

将数字转换为特定范围内的等价物