[英]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;
第二個你將任何數字存儲在一個float
或double
假設它不再100%准確,因為賠率不是。 第二個你對數字執行任何操作,特別是如果它不是加/減,你可以相當確定有一些錯誤。 如果你想知道它們究竟有多少錯誤,那么你就開始進入一些相當復雜的數學。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.