1

我有一个用户将修改的数据网格。一列存储一个单精度浮点数。当用户输入一个超过 7 位的数字时,该数字以科学计数法显示,并且与该数字的比较变得非常不准确。我想警告用户该数字仅在发生这种情况时才被近似存储。有什么方法可以确定一个数字何时可以正确存储在一个单曲中?截止值似乎约为 7 位数。除此之外,它还有很长的路要走。

4

3 回答 3

2

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

一步一步解释:

通过设计器或代码将 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("/",".");
              }
        }

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

于 2013-02-07T20:51:02.690 回答
1

您总是可以通过解析输入并将其转回 a 来检查自己string

string s = "0.12345678";
return Single.Parse(s).ToString() == s;
于 2013-02-07T17:58:24.053 回答
1

第二次您将任何数字存储在 a 中floatdouble假设它不再 100% 准确,因为很可能不是。第二次你对数字执行任何操作,特别是如果它不是加法/减法,你可以相当肯定有一些错误。如果您想确切地知道它们的误差有多大,那么您就开始研究一些非常复杂的数学。

于 2013-02-07T21:42:18.793 回答