Convert está comendo o ponto(.)
19/07/2012
0
Digito isso no meu TextBox: 372,89
Convert.ToDouble(textbox.Text.Replace(,,.); >> Resultado: 372,89 e não 372.89
Continua com a vírgula. Então digito de outra forma(não queria fazer assim, pois o usuário está acostumado a digitar vírgula)
372.89
Convert.ToDouble(textbox.Text); >> Resultado: 37289 e não 372.89
Como fazer uma conversão de uma string, com vírgula para um double com ponto.
No BD o campo é do tipo Decimal(9,2) e uso SqlServer 2008 Express Edition.
Pjava
Posts
19/07/2012
Valter Furtado
String str = 372,89;
double? dConvert = null;
double dParam = 0;
if (double.TryParse(str, out dParam))
dConvert = dParam;
19/07/2012
Pjava
372.88999999999999 e não 372.89 >> Isso numa contabilidade é mortal e demissão.
Fiz assim e continua com uma dízima muito grande, e todos sabemos que é devido ao tipo string:
double val = Convert.ToDouble(txt_juros.Text.Replace(,,.), CultureInfo.InvariantCulture);
Existe algum controle no Framework 4.0 que ao digitar um valor ele já é double? Tipo, EditCurrency, usado no Jedi do Delphi?
19/07/2012
Pjava
System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo(pt-BR);
string valor =7,31;
double valorConvertido = double.Parse(valor);
Resultado: 7.31
O valor vem correto, mas se faço conforme abaixo, aí o valor vem em uma dízima terrível
System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo(pt-BR);
string valor = txt_juros.Text;
double valorConvertido = double.Parse(valor);
Resultado:7,30999999999996
19/07/2012
Joel Rodrigues
19/07/2012
Joel Rodrigues
double val = Convert.ToDouble(´´372,89´´); NumberFormatInfo nnfi = new CultureInfo(en-US).NumberFormat; MessageBox.Show(val.ToString(nnfi));
O valor exibido deve ser ´´372.89´´.
Mas veja a resposta acima, analise bastante, pois pelo que entendi você está querendo inserir o valor decimal no banco como string, o que não é uma boa ideia.
Boa sorte.
19/07/2012
Pjava
System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo(pt-BR);
string vprincipal = txt_principal.Text;
string vmulta = txt_multa.Text;
string vjuros = txt_juros.Text;
string vtotal = txt_total.Text;
double dprincipal = double.Parse(vprincipal);
double dmulta = double.Parse(vmulta);
double djuros = double.Parse(vjuros);
double dtotal = double.Parse(vtotal);
Joel, uma coisa. Se eu passo o valor direto, como nos exemplos vem certo, mas quando eu passo o valor vindo do meu TextBox é aí que a dízima está aparecendo, mas eu não testei esse seu exemplo, vou fazê-lo e já posto, mas com TextBox e não com literal.
19/07/2012
Pjava
NumberFormatInfo nnfi = new CultureInfo(en-US).NumberFormat;
double val = Convert.ToDouble(txt_juros.Text,nnfi);
19/07/2012
Pjava
31.99999996 e etc... Bem, até então eu estou testando o Insert então, por ora a quantidade de casas decimais ainda não é importante. Eu uso o StringBuilder para montar o insert. Acontece que o é passado para o banco não é:
31.9999996 e sim, 31,999996 e a vírgula é entendida pelo Sql Server como separador de campos e não de decimais. Então pergunto: Como eu faço para passar o ponto em lugar da vírgula?
19/07/2012
Joel Rodrigues
Novamente reforço: inserir datas e valores decimais no banco usando concatenação de strings não é uma boa ideia. Para isso existem os parâmetros do SqlCommand, por exemplo.
19/07/2012
Pjava
public bool InsereDarf(string vTrim,DateTime vPag_Ate,DateTime vPer_Apura,string vCnpj,string vCod_Receita,int vNum_Ref,
DateTime vDt_Vencto,double vVal_Principal, double vVal_Multa,double vVal_Juros, double vTotal)
{
SqlConnection conexao = new SqlConnection();
conexao.ConnectionString = ConfigurationManager.ConnectionStrings[conectDarf].ConnectionString;
conexao.Open();
string sql = insert into tbl_darf(trim,pag_ate,per_apura,cnpj,codreceita,num_ref,dt_vencto,val_principal,val_multas,val_juros,val_total) ;
sql += values(:p_trim, :p_pagate, :p_perapura, :p_cnpj, :p_codreceita, :p_numref, :dt_vencto, :p_princip, :p_multa, :p_juros, :p_total);
SqlCommand cmdInsert = new SqlCommand();
cmdInsert.CommandText = sql;
cmdInsert.Connection = conexao;
SqlParameter ptrim = new SqlParameter();
ptrim.DbType = DbType.String;
ptrim.Value = vTrim;
ptrim.ParameterName = p_trim;
SqlParameter ppagate = new SqlParameter();
ppagate.DbType = DbType.String;
ppagate.Value = vPag_Ate;
ppagate.ParameterName = p_pagate;
SqlParameter pperapura = new SqlParameter();
pperapura.DbType = DbType.String;
pperapura.Value = vPer_Apura;
pperapura.ParameterName = p_perapura;
SqlParameter pcnpj = new SqlParameter();
pcnpj.DbType = DbType.String;
pcnpj.Value = vCnpj;
pcnpj.ParameterName = p_cnpj;
SqlParameter pcodreceita = new SqlParameter();
pcodreceita.DbType = DbType.String;
pcodreceita.Value = vCod_Receita;
pcodreceita.ParameterName = p_codreceita;
SqlParameter pnumref = new SqlParameter();
pnumref.DbType = DbType.Int32;
pnumref.Value = vNum_Ref;
pnumref.ParameterName = p_numref;
SqlParameter pdtvencto = new SqlParameter();
pdtvencto.DbType = DbType.DateTime;
pdtvencto.Value = vDt_Vencto;
pdtvencto.ParameterName = dt_vencto;
SqlParameter pprincip = new SqlParameter();
pprincip.DbType = DbType.Double;
pprincip.Value = vVal_Principal;
pprincip.ParameterName = p_princip;
SqlParameter pmulta = new SqlParameter();
pmulta.DbType = DbType.Double;
pmulta.Value = vVal_Multa;
pmulta.ParameterName = p_multa;
SqlParameter pjuros = new SqlParameter();
pjuros.DbType = DbType.Double;
pjuros.Value = vVal_Juros;
pjuros.ParameterName = p_juros;
SqlParameter ptotal = new SqlParameter();
ptotal.DbType = DbType.Double;
ptotal.Value = vTotal;
ptotal.ParameterName = p_total;
cmdInsert.Parameters.Add(ptrim);
cmdInsert.Parameters.Add(ppagate);
cmdInsert.Parameters.Add(pperapura);
cmdInsert.Parameters.Add(pcnpj);
cmdInsert.Parameters.Add(pcodreceita);
cmdInsert.Parameters.Add(pnumref);
cmdInsert.Parameters.Add(pdtvencto);
cmdInsert.Parameters.Add(pprincip);
cmdInsert.Parameters.Add(pmulta);
cmdInsert.Parameters.Add(pjuros);
cmdInsert.Parameters.Add(ptotal);
cmdInsert.ExecuteNonQuery();
cmdInsert.Dispose();
conexao.Close();
return true;
}
19/07/2012
Joel Rodrigues
Exemplo: INSERT INTO TABELA (CAMPO) VALUES (@VALOR).
Testa aí.
19/07/2012
Joel Rodrigues
cmdInsert.Parameters.AddWithValue(´NOME_PARAMETRO´, valor_parametro);
Com isso, o tipo do parâmetro é assumido como o tipo do valor.
Um abraço.
20/07/2012
Pjava
public bool InsereDarf(string vTrim,DateTime vPag_Ate,DateTime vPer_Apura,string vCnpj,string vCod_Receita,int vNum_Ref,
DateTime vDt_Vencto,double vVal_Principal, double vVal_Multa,double vVal_Juros, double vTotal)
{
SqlConnection conexao = new SqlConnection();
conexao.ConnectionString = ConfigurationManager.ConnectionStrings[conectDarf].ConnectionString;
conexao.Open();
string sql = insert into tbl_darf(trim,pag_ate,per_apura,cnpj,cod_receita,num_ref,dt_vencto,val_principal,val_multa,val_juros_encargos,val_total) ;
sql += values(@p_trim, @p_pagate, @p_perapura, @p_cnpj, @p_codreceita, @p_numref, @dt_vencto, @p_princip, @p_multa, @p_juros, @p_total);
SqlCommand cmdInsert = new SqlCommand();
cmdInsert.CommandText = sql;
cmdInsert.Connection = conexao;
cmdInsert.Parameters.AddWithValue(p_trim, vTrim);
cmdInsert.Parameters.AddWithValue(p_pagate, vPag_Ate);
cmdInsert.Parameters.AddWithValue(p_perapura,vPer_Apura);
cmdInsert.Parameters.AddWithValue(p_cnpj, vCnpj);
cmdInsert.Parameters.AddWithValue(p_codreceita, vCod_Receita);
cmdInsert.Parameters.AddWithValue(p_numref, vNum_Ref);
cmdInsert.Parameters.AddWithValue(dt_vencto, vDt_Vencto);
cmdInsert.Parameters.AddWithValue(p_princip, vVal_Principal);
cmdInsert.Parameters.AddWithValue(p_multa, vVal_Multa);
cmdInsert.Parameters.AddWithValue(p_juros, vVal_Juros);
cmdInsert.Parameters.AddWithValue(p_total, vTotal);
cmdInsert.ExecuteNonQuery();
cmdInsert.Dispose();
conexao.Close();
return true;
}
Clique aqui para fazer login e interagir na Comunidade :)