15/02/23 10:13
Carlo
Postato originariamente da pacifico:
Inserendo i numeri interi, la somma risulta perfetta viceversa inserendo i numeri decimali, no.
Per i numeri decimali ho inserito:
5.23+6+45.12+5.24+3.21 e la somma dovrebbe essere di: 64.80 mentre risulta: 5886.
Il codice usato grazie a Carlo che saluto:
Gentilmente per modificare i codici per la visualizzazione al totale delle migliaia e decimali. (#,##0,###).
Inserendo i numeri interi, la somma risulta perfetta viceversa inserendo i numeri decimali, no.
Per i numeri decimali ho inserito:
5.23+6+45.12+5.24+3.21 e la somma dovrebbe essere di: 64.80 mentre risulta: 5886.
Il codice usato grazie a Carlo che saluto:
double Totale = 0; for (int i = 0; i < DataGridView.Rows.Count; i++) { double col2 = 0; //tentativo di conversione da string a double if (double.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2)) { Totale += col2; // se la conversione è andata a buon fine } } DataGridView.Rows.Add(6, "Totale", Totale); per il codice riguardo ai numeri interi: Int Totale = 0; for (int i = 0; i < DataGridView.Rows.Count; i++) { int col2 = 0; //tentativo di conversione da string a int if (int.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2)) { Totale += col2; // se la conversione è andata a buon fine } } DataGridView.Rows.Add(6, "Totale", Totale);
Gentilmente per modificare i codici per la visualizzazione al totale delle migliaia e decimali. (#,##0,###).
non servono due codici per numeri interi e non, quello con la conversione in double che puoi cambiare anche in decimal come consiglia Thejuster va bene per entrambi.
Il tuo problema risiede nel fatto che hai inserito i valori nell'XML con il formato americano dove si usa il punto decimale, mentre il tuo PC sicuramente è impostato sulla cultura "it-IT" dove invece si usano le virgole decimali.
Per verificare se sostituisci i punti con le virgole nell'XML vedrai che la somma sarà corretta.
Per fare in modo che i punti decimali sino correttamente interpretati nel tuo PC localizzato in Italia, puoi temporaneamente cambiare l'impostazione ma poi se in un'altra tabella inserirai numeri con le virgole decimali il programma non rifunzionerà più.
Al tuo codice vanno inserite due righe:
private void Carica_TabellaA() { // Cambio temporaneo dell'interpretazione del separatore decimale System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); customCulture.NumberFormat.NumberDecimalSeparator = "."; System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; DataGridView.Rows.Clear(); string[] elementi_passati = new string[Percorso.Conta_numero_elementi_TabellaA()]; elementi_passati = Percorso.Carica_contenuto_elementiTabellaA(); for (int y = 0; y < elementi_passati.Length; y++) { XmlDocument DocumentoXml = new XmlDocument(); DocumentoXml.Load(elementi_passati[y]); string idContatto = System.IO.Path.GetFileNameWithoutExtension(elementi_passati[y]); XmlNode nodotextbox5 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox5"); XmlNode nodotextbox6 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox6"); XmlNode nodotextbox7 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox7"); XmlNode nodotextbox8 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox8"); XmlNode nodotextbox9 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox9"); string[] nuovarigaA = { idContatto, nodotextbox5.InnerText, nodotextbox6.InnerText, nodotextbox7.InnerText, nodotextbox8.InnerText, nodotextbox9.InnerText }; DataGridView.Rows.Add(1, " ", nodotextbox5.InnerText); DataGridView.Rows.Add(2, " ", nodotextbox6.InnerText); DataGridView.Rows.Add(3, " ", nodotextbox7.InnerText); DataGridView.Rows.Add(4, " ", nodotextbox8.InnerText); DataGridView.Rows.Add(5, " ", nodotextbox9.InnerText); decimal Totale = 0; //decimal for (int i = 0; i < DataGridView.Rows.Count; i++) { decimal col2 = 0; //decimal //tentativo di conversione da string a decimal if (decimal.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2)) { Totale += col2; // se la conversione è andata a buon fine } } DataGridView.Rows.Add(6, "Totale", Totale.ToString("0.00")); // formattato con due decimali } }
Ultima modifica effettuata da Carlo 15/02/23 10:46
in programmazione tutto è permesso