簡體   English   中英

如何在C#中將其作為單個存儲時,確定用戶輸入的數字是否會被誤傳?

[英]How can I determine if a number entered by a user will be misrepresented when stored as a Single in C#?

我有一個用戶將修改的數據網格。 一列存儲Single preciion浮點數。 當用戶輸入長於7位的數字時,該數字以科學計數法顯示,並且與數字的比較變得非常不准確。 我想警告用戶,當這種情況發生時,該號碼僅被存儲為近似值。 有沒有辦法確定何時將一個號碼正確存儲在一個號碼中? 截止值似乎約為7位數。 除此之外還有其他任何事情。

我認為你需要對每個細胞進行驗證。

一步一步解釋:

按設計器或代碼將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%准確,因為賠率不是。 第二個你對數字執行任何操作,特別是如果它不是加/減,你可以相當確定有一些錯誤。 如果你想知道它們究竟有多少錯誤,那么你就開始進入一些相當復雜的數學。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM