Estou entrando int
com um valor de 6 dígitos. Quero exibi-lo como um String
com um ponto decimal (.) A 2 dígitos do final de int
. Eu queria usar um, float
mas foi sugerido para usar String
para uma melhor saída de exibição (em vez de 1234.5
será 1234.50
). Portanto, preciso de uma função que aceite um int
parâmetro as e retorne o formatado corretamenteString
com um ponto decimal 2 dígitos no final.
Dizer:
int j= 123456
Integer.toString(j);
//processing...
//output : 1234.56
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();
Respostas:
fonte
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Como mencionado nos comentários, um StringBuilder é provavelmente uma implementação mais rápida do que o uso de um StringBuffer . Conforme mencionado nos documentos Java:
Uso:
Ou se você precisar de sincronização, use o StringBuffer com uso semelhante:
fonte
java.lang.StringIndexOutOfBoundsException
(tentativa de acessar uma referência que não existe).fonte
java.math.BigDecimal
como usardouble
pode causar erro de arredondamento . Se a velocidade é mais valiosa do que a precisão,double
melhor.Na maioria dos casos de uso, usar um
StringBuilder
(como já respondido) é uma boa maneira de fazer isso. No entanto, se o desempenho importa, essa pode ser uma boa alternativa.fonte
Usando o ApacheCommons3 StringUtils, você também pode fazer
é basicamente concatenação de substring, mas mais curta se você não se importa em usar bibliotecas ou já depende de StringUtils
fonte
Você poderia usar
De acordo com os comentários, 12345 / 100.0 seria melhor, assim como o uso de double em vez de float.
fonte
double
pode ser uma escolha melhor. float tem precisão de apenas 6 dígitos.Se você estiver usando um sistema em que o float é caro (por exemplo, sem FPU) ou não é permitido (por exemplo, na contabilidade), você pode usar algo como isto:
Caso contrário, o DecimalFormat é a melhor solução. (a variante StringBuilder acima não funcionará com números pequenos (<100)
fonte
Eu acho que uma solução mais simples e mais elegante para inserir uma String em uma determinada posição seria esta linha:
Por exemplo, para inserir uma
:
String ausente no tempo:O que ele faz é corresponder
position
caracteres desde o início da sequência, agrupar e substituir o grupo por si mesmo ($1
) seguido pelainsert
sequência. Observe o replaceAll, mesmo que sempre exista uma ocorrência, porque o primeiro parâmetro deve ser uma regex.É claro que ele não tem o mesmo desempenho que a solução StringBuilder, mas acredito que a sucessão e a elegância de uma linha única simples e mais fácil de ler (em comparação com um método enorme) são suficientes para torná-la a solução preferida na maioria dos que não são de desempenho casos de uso críticos.
Nota: Estou resolvendo o problema genérico no título por motivos de documentação; é claro que se você estiver lidando com números decimais, deverá usar as soluções específicas de domínio já propostas.
fonte
String.format ("% 0d.% 02d", d / 100, d% 100);
fonte
Para Kotlin caras;) a partir da resposta aceita (@ MikeThomsen's)
Teste ✅
fonte
fonte
fonte
Tente o seguinte:
fonte