浮点-如何确定用户输入的数字在C#中存储为Single时是否会被误传

本文关键字:Single 存储 是否 何确定 用户 输入 数字 浮点 | 更新日期: 2023-09-27 17:58:08

我有一个用户将修改的数据网格。一列存储一个单精度浮点。当用户输入一个超过7位数的数字时,该数字将以科学记数法显示,与该数字的比较将变得非常不准确。我想提醒用户,当这种情况发生时,号码只会被存储得很近。有什么方法可以确定一个数字何时能正确存储在一个单曲中吗?截止数字似乎是7位数左右。任何超过这一点的事情都是不可能的。

浮点-如何确定用户输入的数字在C#中存储为Single时是否会被误传

我认为您需要对每个单元格进行验证。

逐步解释:

通过设计器或代码将CellValidating事件添加到DataGridView:

  dataGridView1.CellValidating+=dataGridView1_CellValidating;

检查你想要这样:

   private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            double value = 0;
            if (double.TryParse(e.FormattedValue.ToString(), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out value))
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].ErrorText = "";

                //   e.Cancel = false;
            }
            else
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].ErrorText = "Bad Input Please Correct It !";
                //   e.Cancel = true;  if you do this the datagrid dont let user go next row
            }
        }

如果你想纠正你自己的价值,也要做以下步骤:

也添加CellValidated事件:

 dataGridView1.CellValidated+=dataGridView1_CellValidated;

检查一下:

  private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1[e.ColumnIndex, e.RowIndex].Value == null)
                return;
              double value = 0;
              if (double.TryParse(dataGridView1[e.ColumnIndex,e.RowIndex].Value.ToString(), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out value))
              {
                  dataGridView1[e.ColumnIndex, e.RowIndex].Value = Math.Round(value, 2).ToString().Replace("/",".");
              }
        }

注意:如果要在特殊单元格上进行编辑,则每次编辑单元格时都会发生此事件。请在引发事件之前进行检查。您可以为每列设置最大输入长度,以避免错误输入。

您可以通过解析输入并将其返回为string:来进行自我检查

string s = "0.12345678";
return Single.Parse(s).ToString() == s;

floatdouble中存储任何数字的那一秒,假设它不再是100%准确的,因为很可能不是。当你对这个数字执行任何运算的那一秒,特别是如果它不是加法/减法,你可以相当肯定地确定存在一些错误。如果你想确切地知道它们的误差有多大,那么你就开始进入一些相当复杂的数学。