ユーザーが変更するデータグリッドがあります。1 つの列には単精度浮動小数点数が格納されます。ユーザーが 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 に保存するか、float
100 double
% 正確ではないと仮定した瞬間、オッズはそうではないためです。2 番目に数値に対して操作を実行すると、特にそれが加算/減算以外の場合は、何らかのエラーがあることがかなり確信できます。誤差がどれくらいかを正確に知りたい場合は、かなり複雑な数学に取り掛かります。
于 2013-02-07T21:42:18.793 に答える
1
入力を解析してに戻すことで、いつでも自分で確認できますstring
。
string s = "0.12345678";
return Single.Parse(s).ToString() == s;
于 2013-02-07T17:58:24.053 に答える