Me estoy metiendo en un int
con un valor de 6 dígitos. Quiero mostrarlo como a String
con un punto decimal (.) A 2 dígitos desde el final de int
. Quería usar un float
pero se me sugirió usar String
para una mejor salida de pantalla (en lugar de 1234.5
lo será 1234.50
). Por lo tanto, necesito una función que tome un int
parámetro como y devuelva el formato correcto String
con un punto decimal a 2 dígitos del final.
Decir:
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();
Respuestas:
fuente
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Como se mencionó en los comentarios, un StringBuilder es probablemente una implementación más rápida que usar un StringBuffer . Como se menciona en los documentos de Java:
Uso:
O si necesita sincronización, use StringBuffer con un uso similar:
fuente
java.lang.StringIndexOutOfBoundsException
(intentando acceder a una referencia que no existe).fuente
java.math.BigDecimal
como usardouble
puede causar un error de redondeo . Si la velocidad es más valiosa que la precisión,double
es mejor.En la mayoría de los casos de uso, usar un
StringBuilder
(como ya se respondió) es una buena manera de hacerlo. Sin embargo, si el rendimiento es importante, esta puede ser una buena alternativa.fuente
Usando ApacheCommons3 StringUtils, también podrías hacer
Básicamente es una concatenación de subcadenas, pero más corta si no te importa usar bibliotecas, o ya depende de StringUtils
fuente
Podrías usar
Según los comentarios, 12345 / 100.0 sería mejor, al igual que el uso de doble en lugar de flotante.
fuente
double
Podría ser una mejor opción. El flotador solo tiene una precisión de 6 dígitos.Si está utilizando un sistema donde el flotador es costoso (por ejemplo, sin FPU) o no está permitido (por ejemplo, en contabilidad), podría usar algo como esto:
De lo contrario, DecimalFormat es la mejor solución. (La variante StringBuilder anterior no funcionará con números pequeños (<100)
fuente
Creo que una solución más simple y elegante para insertar una cadena en una determinada posición sería esta frase:
Por ejemplo, para insertar una falta
:
en una cadena de tiempo:Lo que hace es, coincide con los
position
caracteres desde el principio de la cadena, agrupa eso y reemplaza el grupo con sí mismo ($1
) seguido por elinsert
cadena. Tenga en cuenta el replaceAll, aunque siempre haya una ocurrencia, porque el primer parámetro debe ser una expresión regular.Por supuesto, no tiene el mismo rendimiento que la solución StringBuilder, pero creo que la concisión y la elegancia como una sola línea simple y más fácil de leer (en comparación con un método enorme) es suficiente para convertirla en la solución preferida en la mayoría de los casos sin rendimiento -críticos casos de uso.
Tenga en cuenta que estoy resolviendo el problema genérico en el título por razones de documentación, por supuesto, si se trata de números decimales, debe usar las soluciones específicas de dominio ya propuestas.
fuente
String.format ("% 0d.% 02d", d / 100, d% 100);
fuente
Para los tipos de Kotlin;) de la respuesta aceptada (@ MikeThomsen's)
Prueba ✅
fuente
fuente
fuente
Prueba esto :
fuente