none
Numeros decimais RRS feed

  • Pergunta

  • Boa tarde, estou tendo um problema para receber números decimais no meu método create. O sistema esta configurado com globalization pt-BR, e os valores decimais na view são tratados todos todos com virgula. O problema agora é que um dos campos  recebe o resultado de um js, e para fazer o calculo com js preciso trocar as virgulas pelos pontos, e o valor do resultado dessa operação matemática na view fica com ponto, na hora que vou passar pro controller o valor, é exibido a mensagem que o valor não é valido.  Queria saber se tem alguma forma de eu passar esse valor para o controller mesmo com ponto? fazer o sistema reconhecer como valor decimal tanto números com ponto quanto com virgula.. (OBS: não posso converter os pontos pela virgula logo quando termino operação matemática no js, porque esse campo é amarrado com vários outros para realizar diversas outras operações matemáticas)
    sexta-feira, 6 de novembro de 2015 16:00

Respostas

  • Então, mas aí dentro do textbox você não poderia alterar o ponto e colocar uma vírgula?

    Porque depois para manipular no JS tem como trocar novamente.

    • Sugerido como Resposta SimorC sábado, 7 de novembro de 2015 14:37
    • Marcado como Resposta Marcos SJ segunda-feira, 9 de novembro de 2015 11:37
    sexta-feira, 6 de novembro de 2015 20:47
  • Bom dia,

    esse sistema eu peguei para fazer algumas modificações, e a parte do JS estava bem confusa. O calculo era feito e o resultado mandado para o textbox assim:

    $('#icms_total_bc_icms').val(parseFloat($('#icms_total_icms').val().replace(",", ".")) / (((parseFloat($('#icms_percentual_icms').val().replace(",", ".")) / 100) * parseFloat($('#icms_percentual_bc_icms').val().replace(",", "."))) / 100))

    Por esse motivo eu não conseguia usar o replace direto nele. A solução foi:

    icms_total_bc_icms_formatado = $('#icms_total_bc_icms').val().replace(".", ",");
    
    $('#icms_total_bc_icms').val(icms_total_bc_icms_formatado);
    Criei uma variável para receber o valor já calculado e usar replace, e depois mandar esse valor pro textbox.

    Deu certo.. :D

    • Sugerido como Resposta SimorC sábado, 7 de novembro de 2015 14:37
    • Marcado como Resposta Marcos SJ segunda-feira, 9 de novembro de 2015 11:37
    sábado, 7 de novembro de 2015 14:34

Todas as Respostas

  • Não entendi direito o fluxo da operação. Você faz a operação e o resultado em JS você já passa imediatamente para o controller?
    sexta-feira, 6 de novembro de 2015 16:09
  • Boa tarde.

    Assim como a Ana, também não entendi exatamente a questão, porém para padronização, tu podes dar um override no InitializeCulture e deixar como tu desejas (ponto final no lugar da vírgula como separador):

    protected override void InitializeCulture()
        {
            var culture = CultureInfo.CreateSpecificCulture("pt-BR");
            culture.NumberFormat.NumberDecimalSeparator = ".";
            Thread.CurrentThread.CurrentCulture = culture;
            Thread.CurrentThread.CurrentUICulture = culture;
    
            base.InitializeCulture();
        }

    Att., Rafael Simor

    sexta-feira, 6 de novembro de 2015 17:03
  • Então, o resultado do JS é colocado em um textbox...Só vai para o controller depois que eu clico no submit...
    sexta-feira, 6 de novembro de 2015 17:33
  • Então, mas aí dentro do textbox você não poderia alterar o ponto e colocar uma vírgula?

    Porque depois para manipular no JS tem como trocar novamente.

    • Sugerido como Resposta SimorC sábado, 7 de novembro de 2015 14:37
    • Marcado como Resposta Marcos SJ segunda-feira, 9 de novembro de 2015 11:37
    sexta-feira, 6 de novembro de 2015 20:47
  • Bom dia,

    esse sistema eu peguei para fazer algumas modificações, e a parte do JS estava bem confusa. O calculo era feito e o resultado mandado para o textbox assim:

    $('#icms_total_bc_icms').val(parseFloat($('#icms_total_icms').val().replace(",", ".")) / (((parseFloat($('#icms_percentual_icms').val().replace(",", ".")) / 100) * parseFloat($('#icms_percentual_bc_icms').val().replace(",", "."))) / 100))

    Por esse motivo eu não conseguia usar o replace direto nele. A solução foi:

    icms_total_bc_icms_formatado = $('#icms_total_bc_icms').val().replace(".", ",");
    
    $('#icms_total_bc_icms').val(icms_total_bc_icms_formatado);
    Criei uma variável para receber o valor já calculado e usar replace, e depois mandar esse valor pro textbox.

    Deu certo.. :D

    • Sugerido como Resposta SimorC sábado, 7 de novembro de 2015 14:37
    • Marcado como Resposta Marcos SJ segunda-feira, 9 de novembro de 2015 11:37
    sábado, 7 de novembro de 2015 14:34