1

ユーザーが変更するデータグリッドがあります。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 に保存するか、float100 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 に答える