Ich steige int
mit einem 6-stelligen Wert ein. Ich möchte es als String
mit einem Dezimalpunkt (.) Bei 2 Stellen ab dem Ende von anzeigen int
. Ich wollte ein verwenden float
, wurde aber vorgeschlagen, es String
für eine bessere Anzeigeausgabe zu verwenden (anstatt 1234.5
es zu sein 1234.50
). Daher benötige ich eine Funktion, die einen int
as-Parameter verwendet und den ordnungsgemäß formatierten zurückgibtString
2-fache Dezimalstelle vom Ende zurückgibt.
Sagen:
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();
Antworten:
quelle
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Wie in den Kommentaren erwähnt, ist ein StringBuilder wahrscheinlich eine schnellere Implementierung als die Verwendung eines StringBuffers . Wie in den Java-Dokumenten erwähnt:
Verwendung :
Oder wenn Sie eine Synchronisation benötigen, verwenden Sie die StringBuffer mit ähnlicher Verwendung:
quelle
java.lang.StringIndexOutOfBoundsException
(Versuch, auf eine nicht vorhandene Referenz zuzugreifen).quelle
java.math.BigDecimal
wie die Verwendungdouble
verursachen können Rundungsfehler . Wenn Geschwindigkeit mehr wert ist als Präzision,double
ist sie besser.In den meisten Anwendungsfällen ist die Verwendung von a
StringBuilder
(wie bereits beantwortet) ein guter Weg, dies zu tun. Wenn es jedoch auf die Leistung ankommt, kann dies eine gute Alternative sein.quelle
Mit ApacheCommons3 StringUtils können Sie dies auch tun
Es ist im Grunde eine Verkettung von Teilzeichenfolgen, aber kürzer, wenn Sie nichts dagegen haben, Bibliotheken zu verwenden, oder bereits abhängig von StringUtils
quelle
Du könntest benutzen
Gemäß den Kommentaren wäre 12345 / 100.0 besser, ebenso wie die Verwendung von double anstelle von float.
quelle
double
könnte eine bessere Wahl sein. float ist nur auf 6 Stellen genau.Wenn Sie ein System verwenden, bei dem Float teuer (z. B. keine FPU) oder nicht zulässig (z. B. in der Buchhaltung) ist, können Sie Folgendes verwenden:
Ansonsten ist das DecimalFormat die bessere Lösung. (Die obige StringBuilder-Variante funktioniert nicht mit kleinen Zahlen (<100).
quelle
Ich denke, eine einfachere und elegantere Lösung zum Einfügen eines Strings an einer bestimmten Position wäre dieser Einzeiler:
So fügen Sie beispielsweise eine fehlende Zeichenfolge
:
in eine Zeitzeichenfolge ein:Was es tut, ist,
position
Zeichen vom Anfang der Zeichenfolge abzugleichen, diese zu gruppieren und die Gruppe durch sich selbst ($1
) zu ersetzen, gefolgt voninsert
Zeichenfolge ersetzt. Beachten Sie das replaceAll, auch wenn es immer ein Vorkommen gibt, da der erste Parameter ein regulärer Ausdruck sein muss.Natürlich hat es nicht die gleiche Leistung wie die StringBuilder-Lösung, aber ich glaube, dass die Prägnanz und Eleganz eines einfachen und leichter lesbaren Einzeilers (im Vergleich zu einer großen Methode) ausreicht, um es zur bevorzugten Lösung für die meisten Nicht-Leistung zu machen -kritische Anwendungsfälle.
Hinweis: Ich löse das generische Problem im Titel aus Dokumentationsgründen. Wenn Sie mit Dezimalzahlen arbeiten, sollten Sie natürlich die bereits vorgeschlagenen domänenspezifischen Lösungen verwenden.
quelle
String.format ("% 0d.% 02d", d / 100, d% 100);
quelle
Für Kotlin Jungs;) aus der akzeptierten Antwort (@ MikeThomsen's)
Test ✅
quelle
quelle
quelle
Versuche dies :
quelle