Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá
Estou ultilizando o tipo double para trabalhar os meus campos numéricos. Oque está me surpreendedo é como eu declaro o numero e como ele me retorna, por exemplo:
string valor = "1.500,30";//declara variavel
valor = valor.Replace(".","");//troca (ponto) por vazio
valor = valor.Replace(",",".");//troca (virgula) por (ponto)
return Convert.ToDouble(valor); //deveria me retornar 1500.30
Bom, esse retorno está me retornando assim 1500,30
quero que me retorne assim 1500.30
Achei muito estranho pois quando declaramos variaveis do tipo double, sempre declaramos separado por pontos e pelo que percebi ele retorna com virgula, estranho, oque fazer?
obs: Precisa ser com ponto pois o BD só aceita separado com ponto, pelo que sei..
Cabei de testar, o maldito me retorna virgula ainda ;///
outro jeito?
Cara se você remover virgula e pronto e der um convert ele sempre vai te retornar com virgulas mesmo.
Agora se você precisa de um valor com pronto, pq não faz apenas um replace?
string valor = "1.500,30";//declara variavel
string r = valor.Replace(".", "").Replace(",", ".");Ou você pode mudar a coluna do BD pra decimal ou número
Como você esta dando return convertendo para Double, sempre irá colocar a virgula de novo
Ivan, tenho um metodo genérico que uso no projeto todo, meu double tem que retornar com pontos separando as casas decimais sacou? será se usar um format não soluciona isso? alguem pode me ajudar como formatar um tipo double para retorna com pontos separando as casas decimais? :S
Boa tarde,
segue abaixo um exemplo:
string a = "1.500,20";
double d = Convert.ToDouble(a);
Response.Write(d.ToString("N2"));
espero que ajude.
Abraço e sucesso!
Seu primeiro código esta OK, mas não precisa converter pra double.
Abraços...
QuiteLab, bom cara, eu preciso converter para double pois meu projeto está todo assim, então preciso fazer do meu jeito.. mais obrigado..
yslladd o valor retornado pelo seu codigo é o mesmo que está na string
Eddy acho que com isso vai resolver seu problema.
Mas este é o processo pra gravar no banco de dados? Ou para continuar utilizando a variável no código.
Este processo do replace só é feito no último momento quando se vai gravar no banco, por mais que no banco esteja decimal pode passar uma variável string do c# que não dará problema.
Abraços...
Olá amigo! Você precisa que o double retornado esteja no formato numerico americano? Ex: 1,500.20
Se for isso você precisará alterar as configurações regionais na sua aplicação, para que ela retorne numeros no formato americano.
Testei o seguinte codigo aqui:
string valor = "1.500,25";
//Converto o numero para double, mas ainda no formato pt-BR
double numero = Convert.ToDouble(valor);
//Mudo a configuração regional para o formato americano
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
//Converto o retorno novamente para double, que agora adquire o formato americano
return Convert.ToDouble(numero);Ah! esqueci de avisar...
Você deve adicionar dois namespaces que englobam esses novos comandos
using System.Globalization; //Para as alterações de Cultura
using System.Threading; //Para controle das Threads
Se necessário depois retorne o CultureInfo para "pt-BR" garantindo que o resto da aplicação não fique no formato americano.
Abraço.
Boa noite Eddy, tenta assim:
string valor = "1.500,30";//declara variavel
double res = Convert.ToDouble(valor); //deveria me retornar 1500.30