J'entre dans un int
avec une valeur à 6 chiffres. Je veux l'afficher sous la forme String
d' un avec un point décimal (.) À 2 chiffres à partir de la fin de int
. Je voulais utiliser un float
mais il a été suggéré de l'utiliser String
pour une meilleure sortie d'affichage (au lieu de 1234.5
l'être 1234.50
). Par conséquent, j'ai besoin d'une fonction qui prendra un int
comme paramètre et retournera le correctement formaté String
avec un point décimal à 2 chiffres de la fin.
Dire:
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();
Réponses:
la source
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Comme mentionné dans les commentaires, un StringBuilder est probablement une implémentation plus rapide que l'utilisation d'un StringBuffer . Comme mentionné dans la documentation Java:
Utilisation:
Ou si vous avez besoin d'une synchronisation, utilisez le StringBuffer avec une utilisation similaire:
la source
java.lang.StringIndexOutOfBoundsException
(tentative d'accès à une référence qui n'existe pas).la source
java.math.BigDecimal
car l'utilisationdouble
peut provoquer une erreur d'arrondi . Si la vitesse est plus précieuse que la précision,double
c'est mieux.Dans la plupart des cas d'utilisation, utiliser un
StringBuilder
(comme déjà répondu) est un bon moyen de le faire. Cependant, si la performance compte, cela peut être une bonne alternative.la source
En utilisant ApacheCommons3 StringUtils, vous pouvez également faire
c'est essentiellement une concaténation de sous-chaînes mais plus courte si cela ne vous dérange pas d'utiliser des bibliothèques, ou déjà en fonction de StringUtils
la source
Vous pourriez utiliser
Selon les commentaires, 12345 / 100.0 serait mieux, tout comme l'utilisation de double au lieu de float.
la source
double
pourrait être un meilleur choix. float n'est précis qu'à 6 chiffres.Si vous utilisez un système où le flottant coûte cher (par exemple pas de FPU) ou n'est pas autorisé (par exemple en comptabilité), vous pouvez utiliser quelque chose comme ceci:
Sinon, le DecimalFormat est la meilleure solution. (la variante StringBuilder ci-dessus ne fonctionnera pas avec de petits nombres (<100)
la source
Je pense qu'une solution plus simple et plus élégante pour insérer une chaîne dans une certaine position serait ce one-liner:
Par exemple, pour insérer un manquant
:
dans une chaîne de temps:Il fait correspondre les
position
caractères du début de la chaîne, les groupes et remplace le groupe par lui-même ($1
) suivi de lainsert
chaîne. Faites attention à replaceAll, même s'il y a toujours une occurrence, car le premier paramètre doit être une expression régulière.Bien sûr, elle n'a pas les mêmes performances que la solution StringBuilder, mais je pense que la concision et l'élégance en tant que one-liner simple et plus facile à lire (par rapport à une énorme méthode) sont suffisantes pour en faire la solution préférée dans la plupart des non-performances. -cas d'utilisation critiques.
Remarque Je résous le problème générique dans le titre pour des raisons de documentation, bien sûr, si vous avez affaire à des nombres décimaux, vous devez utiliser les solutions spécifiques au domaine déjà proposées.
la source
String.format ("% 0d.% 02d", d / 100, d% 100);
la source
Pour les mecs Kotlin;) de la réponse acceptée (@ MikeThomsen's)
Test ✅
la source
la source
la source
Essaye ça :
la source