Estou tentando ler alguns valores BigDecimal da seqüência de caracteres. Digamos que eu tenho essa String: "1.000.000.000.999999999999999" e quero obter um BigDecimal. Qual é a maneira de fazer isso?
Primeiro de tudo, eu não gosto das soluções usando substituições de string (substituindo vírgulas etc.). Eu acho que deveria haver algum formatador limpo para fazer esse trabalho para mim.
Eu encontrei uma classe DecimalFormatter, no entanto, uma vez que opera através do dobro - enormes quantidades de precisão são perdidas.
Então, como posso fazer isso?
java
parsing
bigdecimal
bezmax
fonte
fonte
BigDecimal
.Respostas:
Confira
setParseBigDecimal
em DecimalFormat. Com este levantador,parse
você retornará um BigDecimal para você.fonte
Código completo para provar que não
NumberFormatException
é lançado:Resultado
fonte
1000000000.999999999999999
DecimalFormatSymbols.getInstance().getGroupingSeparator()
vez de vírgula, não precisa se assustar com a variedade de localidades.O código de exemplo a seguir funciona bem (o código de idioma precisa ser obtido dinamicamente)
fonte
O código pode ser mais limpo, mas isso parece fazer o truque para diferentes localidades.
fonte
Aqui está como eu faria isso:
Obviamente, se isso estivesse ocorrendo no código de produção, não seria assim tão simples.
Não vejo problema em simplesmente remover as vírgulas da String.
fonte
Eu precisava de uma solução para converter uma String em um BigDecimal sem conhecer o código de idioma e ser independente do código de idioma. Não encontrei nenhuma solução padrão para esse problema, então escrevi meu próprio método auxiliar. Pode ser que também ajude outras pessoas:
Atualização: Aviso! Este método auxiliar funciona apenas para números decimais, portanto, números que sempre têm um ponto decimal! Caso contrário, o método auxiliar poderá fornecer um resultado incorreto para números entre 1000 e 999999 (mais / menos). Obrigado ao bezmax por sua excelente contribuição!
Claro que testei o método:
fonte
7,333
representa? São 7333 ou 7 e 1/3 (7,333)? Em locais diferentes, esse número seria analisado de maneira diferente. Aqui está a prova de conceito: ideone.com/Ue9rT8irá remover todos os caracteres, exceto dígitos e o ponto da sua string.
Para torná-lo compatível com a localidade, você pode usar a
getDecimalSeparator()
partir dejava.text.DecimalFormatSymbols
. Eu não sei Java, mas pode ser assim:fonte
Tópico antigo, mas talvez o mais fácil seja usar o NumberUtils do Apache commons, que possui o método createBigDecimal (String value) ....
Eu acho que (espero) leve em consideração os locais, ou seria um pouco inútil.
fonte
Por favor, tente isso está funcionando para mim
fonte