我有一个用户将修改的数据网格。一列存储一个单精度浮点数。当用户输入一个超过 7 位的数字时,该数字以科学计数法显示,并且与该数字的比较变得非常不准确。我想警告用户该数字仅在发生这种情况时才被近似存储。有什么方法可以确定一个数字何时可以正确存储在一个单曲中?截止值似乎约为 7 位数。除此之外,它还有很长的路要走。
问问题
129 次
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 中float
或double
假设它不再 100% 准确,因为很可能不是。第二次你对数字执行任何操作,特别是如果它不是加法/减法,你可以相当肯定有一些错误。如果您想确切地知道它们的误差有多大,那么您就开始研究一些非常复杂的数学。
于 2013-02-07T21:42:18.793 回答