Problema decimali

giovedì 15 luglio 2010 - 00.51

andreadp Profilo | Junior Member

Come da titolo ma mi spiego meglio.
Ho una textbox associata ad un datagridview nella mia applicazione in c#
La tex contiene dei decimali con 4 cifre decimali. Nel momento in cui faccio l'inserimento in tabella tramite tasto vedo che il numero all'interno del texbox si trasforma, cioè è sempre a 4 cifre decimali ma viene approssimato per eccesso (mantendo sempre quindi i due 0 finali. Io non voglio che ciò accada....Come faccio?? (Sperando di essermi riuscito a spiegare).:-)
Andrea

AntCiar Profilo | Expert

ciao.

se ho capito bene nella tua textbox ci sta tipo 25.3512 e nel DB ci arriva 25.00 oppure 2535.00?


Cristian Barca

andreadp Profilo | Junior Member

se metto 25.3512 nel db ci arriva 25.3500
Andrea

Earthquake Profilo | Junior Member

Forse devi controllare come hai dichiarato il tipo di dato nel database.

andreadp Profilo | Junior Member

nel database è un numeric(9,4)
Andrea

Earthquake Profilo | Junior Member

quando metti numeric(9,4) stai dicendo che vuoi un massimo di 9 cifre di cui 4 per i decimali quindi hai una situazione limite uguale a 99999,9999
quindi come vedi max 5 cifre per gli interi e 4 per i decimali.
Prova ad aumentare un po il range.
Di solito si dichiara un numeric (almeno io così faccio poi ovviamente dipende dalle esigenze) come : numeric(18,6)
Prova così e vedi se funziona.

andreadp Profilo | Junior Member

Ho provato ma la musica non cambia!!!!
Sempre uguale..al momento del salvataggio viene arrotondato comunque alla seconda cifra
Andrea

Earthquake Profilo | Junior Member

Ultimo tentativo per capire chi è che sbaglia.
Prova a scrivere manualmente direttamente nella tabella e vedi se ti arrotonda.
Almeno stabilisci chi sta sbagliando non ti pare?

andreadp Profilo | Junior Member

Allora scrivendo manualmente nella tabella arrotonda giusto in entrambi i casi 9,4 e 18,6
Andrea

Earthquake Profilo | Junior Member

ok primo scoglio superato.
Di che tipo è la variabile che contiene il dato che passi al database?
Decimal Double o Single?

andreadp Profilo | Junior Member

Decimal
Andrea

Earthquake Profilo | Junior Member

ok
il dato nel database lo passi su semplice stringa sql, su stringa sql parametrica o tramite stored procedure con parametri?
negli ultimi due casi controlla se il parametro creato corrisponde alla stessa dichiarazione del database (tipo, lunghezza e precisione per intenderci).

andreadp Profilo | Junior Member

passo i dati attraverso una query del tableAdapter
Andrea

Earthquake Profilo | Junior Member

Riesci a postare un po di codice e sopratutto la query che costruisci?
Magari posso esserti piu di aiuto!!

andreadp Profilo | Junior Member

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
eccolo qua
Andrea

Earthquake Profilo | Junior Member

il problema della conversione sta sulle virgole e sui punti per converitre un numero da decimal a double o viceversa lo devi passare con la virgola se il passante è di tipo string e con il punto se è di tipo numerico (decimal o double)
controlla i numeri che passi in this.importoNumericTextBox.Text
se sono con il punto o con la virgola.
In questo caso dovrebbero essere con la virgola.
poi controlla per esempio vecchio_credito_residuo e assicurati che (se non è di tipo stringa) all'interno ci sia un punto come separatore di decimali.

Una curiosita perche converti in Decimal un double che al suo interno ha una conversione in decimal come in questa riga di codice? :

this.uTENTITableAdapter.UpdateQueryForErogazione(Convert.ToDecimal((double)(vecchio_credito_residuo + (vecchio_importo - Convert.ToDecimal(this.importoNumericTextBox.Text))))

andreadp Profilo | Junior Member

il problema della conversione sta sulle virgole e sui punti per converitre un numero da decimal a double o viceversa lo devi passare con la virgola se il passante è di tipo string e con il punto se è di tipo numerico (decimal o double)
controlla i numeri che passi in this.importoNumericTextBox.Text
se sono con il punto o con la virgola.

Si il dato passato è con la virgola.

poi controlla per esempio vecchio_credito_residuo e assicurati che (se non è di tipo stringa) all'interno ci sia un punto come separatore di decimali.
Vecchio_credito_residuo è di tipo Decimal e contiene un dato estrapolato da una query (string)

Una curiosita perche converti in Decimal un double che al suo interno ha una conversione in decimal come in questa riga di codice? :

E' stato il tentativo di risolvere sto problema...:-(
Andrea

Earthquake Profilo | Junior Member

allora innanzitutto cerca di aggiustare un po il codice e togli tutte le conversioni eccetto quelle a decimal poi, come dicevo prima, assicurati che quando fai la conversione i dati siano passati in modo corretto al convertitore e cioè con il punto se di tipo numerico e con la virgola se di tipo string.
Fammi sapere.
Ciao

andreadp Profilo | Junior Member

Ho pulito il codide da quelle doppie conversioni. La textbox che uso è caratterizzata da :
string decimalSeparator = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;

però non cambia niente.
Andrea

andreadp Profilo | Junior Member

Uff mi avete abbandonato??:-)
Andrea
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5