Länge eines long wertes

Status
Nicht offen für weitere Antworten.

Jenny

Mitglied
Hallo,

ich würde gern die "Länge" von long-Werten ermitteln. Mit Länge meine ich die Anzahl der Dezimalstellen. Gibt es da eine performantere Lösung als den Long in einen String umzuwandeln und dann die Länge zu ermitteln?

schönen gruss
 

tfa

Top Contributor
DU könntest ganz viele if-else-Abfragen machen (also [c]if (l<10) return 1; else if (l<100) return 2; ...[/c]) oder du castest den long-Wert in ein double und berechnest den 10er-Logarithmus. Keine Ahnung, was am schnellsten ist.
 

B4RC0D3

Mitglied
also da eher

Java:
long zahl;
int stellen=1;
while(zahl>10)
{
stellen+=1;
zahl=zahl/10;
}

/edit
oh das mit der performance hab ich nicht gesehen....
da ist meines schlechter.....
 

faetzminator

Gesperrter Benutzer
oder so eine Bastelei:
Java:
int c = 1;
while ((l = l / 10.0) > 1.0) {
    c++:
}

Edit: ach B4RC0D3 war schneller ;)
 

Ark

Top Contributor
Die einfachste Lösung:
Java:
Math.ceil(Math.log10(x)) // ab 1.5
Math.ceil(Math.log(x) / Math.log(10)) // bis vor 1.5
Für Zahlen kleiner oder gleich 0 muss man aber etwas tricksen.

Ark
 
Zuletzt bearbeitet:

Paddelpirat

Bekanntes Mitglied
Will auch noch eine Schleife einwerfen :)

Java:
long zahl;
int stellen = 0;
		
do {
	stellen++;
} while((zahl = zahl / 10) != 0);

Oder wenns einfach gehen soll:

Java:
String.valueOf(zahl).length();

Wobei du bei negativen Zahlen entscheiden müsstest, ob das Minus-Zeichen mitgezählt wird oder nicht.
 

Jenny

Mitglied
Danke für die vielen und schnellen Antworten! Werte unter Null kommen bei mir nicht vor (sind zeiten). Ich werde mal eine simple messung machen und euch berichten!
 

Jenny

Mitglied
Also, für diejenigen, die es interessiert. B4RC0D3 hatte mit seiner einschätzung recht. Die Schleifen-Lösung ist eindeutig am langsamsten (ca. Faktor 2). length() und Logarithmus nehmen sich kaum was (bei meiner messung war length() ein bißchen schneller.

Nochmals Danke, und schönen gruß!
 

Paddelpirat

Bekanntes Mitglied
Mag sich mal Jemand diese Lösung anschauen?

Java:
stellen = 0;
		
long a = 1, b, c;
		
do {
	stellen++;
	b = a << 3;
	c = a << 1;
	a = b+c;
}
while(a <= zahl && a>0);

Ich hab sie mal bei mir getestet und wenn ich mich nicht mit meiner Zeitmessung vertan habe müsste diese Lösung noch schneller sein. (Sogar schneller als wenn man a immer mit 10 multiplizieren würde). In dem anderen Thread stand ja auch dass Dividieren sehr "teuer" ist, daher dieser Ansatz...

Edit:

Falls es jemanden interessiert sind hier die Ergebnisse mit dem TestProgramm aus dem anderen Thread:

sum: 69000000, time: 1672
sum: 69000000, time: 1069
sum: 69000000, time: 212 //if-else
sum: 69000000, time: 1698
sum: 69000000, time: 635 //shift-operator
sum: 69000000, time: 1751
sum: 69000000, time: 1102
sum: 69000000, time: 206 //if-else
sum: 69000000, time: 1687
sum: 69000000, time: 736 //shift

und hier die Shift-Lösung nochmal etwas schöner ohne b und c:
Java:
stellen = 0;		
long a = 1;
		
do {
	stellen++;
	a = ((a << 3) + (a << 1));
}
while(a <= zahl && a>0);

Edit2: Hab gerade noch festgestellt, dass die if-else Anweisung bei richtigen Longs explodiert. Hier die Ergebnisse:

sum: 204000000, time: 7933
sum: 204000000, time: 4845
sum: 204000000, time: 21205 //if-else
sum: 204000000, time: 7791
sum: 204000000, time: 4650 //shift
sum: 204000000, time: 7939
sum: 204000000, time: 4854
sum: 204000000, time: 21123 //if-else
sum: 204000000, time: 7819
sum: 204000000, time: 4753 //shift

Dazu habe ich noch folgende Test-Fälle aufgerufen:
sum += worker.calc(new Long("10000000000000"));
sum += worker.calc(new Long("100000000000000"));
sum += worker.calc(new Long("1000000000000000"));
 
Zuletzt bearbeitet:

Ark

Top Contributor
Das sieht bisher sehr schnell aus. Genial. oO

Ob man da noch etwas rausholen kann, indem man vorpartitioniert?
Java:
if(zahl<1000000000){
	if(zahl<10000){
		// 0 bis <10000
	}
	else{
		// 10000 bis <1000000000
	}
}
else{
	if(zahl<10000000000000){
		// 1000000000 bis <10000000000000
	}
	else{
		// 10000000000000 bis MAX_VALUE
	}
}
Ark
 

Paddelpirat

Bekanntes Mitglied
Kleine Korrektur noch ... if-else bleibt auch bei den longs schneller, allerdings musste ich in dem Test dafür sowas noch anlegen:
Java:
    static long a = new Long("10000000000");
    static long b = new Long("100000000000");
    static long c = new Long("1000000000000");
    static long d = new Long("10000000000000");
    static long e = new Long("100000000000000");
    static long f = new Long("1000000000000000");
    static long g = new Long("10000000000000000");
    static long h = new Long("100000000000000000");
    static long j = new Long("1000000000000000000");
und anschließend if(i < a) etc abfragen... sieht insgesamt hässlich aus, aber scheint die schnellste Lösung zu sein.

@Ark Das (Durchschnitts-)Ergebnis von if-else könnte man bestimmt noch durch "divide & conquer" verbessern, kannst es ja mal ausprobieren :)
 

Marco13

Top Contributor
Sowas wie
static long a = new Long("10000000000");
sollte nicht notwendig sein.
static long a = 10000000000L;
sollte gehen (das "L" am Ende ist das wichtige - ansonsten kommt die Meldung "...constant too large", was du vermutlich mit dem "new Long" zu vermeiden versucht hast)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
A Arrays kombinieren (länge eines Arrays kann 0 sein) Java Basics - Anfänger-Themen 6
O Länge eines Arrays Java Basics - Anfänger-Themen 6
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
L Länge der dritten Dimension eines dreidimensionalen Arraya Java Basics - Anfänger-Themen 1
Z Erste Schritte Einlesen der Länge eines Feldes Java Basics - Anfänger-Themen 25
S Länge eines Elements im String Array Java Basics - Anfänger-Themen 5
S Länge eines zweidimensionalen Feldes Java Basics - Anfänger-Themen 3
E Länge eines spez. Arrays Java Basics - Anfänger-Themen 10
E Länge eines Feldes ausgeben Java Basics - Anfänger-Themen 13
V Warten bis die Länge eines Strings nicht mehr 0 ist Java Basics - Anfänger-Themen 13
D prüfen ob länge eines Arrays == 0 Java Basics - Anfänger-Themen 4
B Maximale Länge eines integer Arrays ? Java Basics - Anfänger-Themen 31
G Länge eines Integers ermitteln? Java Basics - Anfänger-Themen 38
G Länge eines Array trimmen oder dynamisch verändern. Java Basics - Anfänger-Themen 3
B Länge eines Char-Arrays bestimmen Java Basics - Anfänger-Themen 7
B Länge eines JTextFields Java Basics - Anfänger-Themen 3
G Länge eines zweidimensionalen array Java Basics - Anfänger-Themen 2
G länge eines arrays bestimmen Java Basics - Anfänger-Themen 4
R länge eines array? Java Basics - Anfänger-Themen 6
C Länge/Anzahl der Stellen eines Integers Java Basics - Anfänger-Themen 8
D Länge eines Objekt-Arrays Java Basics - Anfänger-Themen 7
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
Hzrfa Länge der längsten Kette java Java Basics - Anfänger-Themen 56
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
JavaBeginner22 Wort mit der größten Länge ausgeben Java Basics - Anfänger-Themen 4
I Array Länge in Klasse festlegen Java Basics - Anfänger-Themen 1
Csircc Neuer Array mit geringerer Länge und selben werten. Java Basics - Anfänger-Themen 2
P Länge des längsten möglichst klein Java Basics - Anfänger-Themen 2
districon 2D Array - Länge zuweisen Java Basics - Anfänger-Themen 1
t2im Java Array-Länge ändern? Java Basics - Anfänger-Themen 22
W Best Practice Tabulatoren verschiedener Länge ersetzen Java Basics - Anfänger-Themen 8
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
M Die länge von char Java Basics - Anfänger-Themen 6
A Best Practice Undefinierte länge bei arrays Java Basics - Anfänger-Themen 4
E Array-list mit einer bestimmten Länge Java Basics - Anfänger-Themen 17
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
C Array - Länge dynamisch übergeben Java Basics - Anfänger-Themen 7
N Array mit unbestimmter länge Java Basics - Anfänger-Themen 12
T String länge messen in mm Java Basics - Anfänger-Themen 1
M Generierter Tannenbaum - String Länge Java Basics - Anfänger-Themen 1
T String/int länge Java Basics - Anfänger-Themen 2
I Länge von mehrdimensionalen Array Java Basics - Anfänger-Themen 5
A Länge Substring Java Basics - Anfänger-Themen 1
D Zweidimensionales Array (Länge) Java Basics - Anfänger-Themen 2
S Listnode Länge Java Basics - Anfänger-Themen 2
shiroX Input/Output Array erstellen / Länge Java Basics - Anfänger-Themen 3
G Erste Schritte berechne länge von einträgen Java Basics - Anfänger-Themen 5
S Länge einer Zahl Java Basics - Anfänger-Themen 18
C Datentypen Array-Einträge überhalb der Array-Länge - welcher Wert? Java Basics - Anfänger-Themen 5
M Strings mit variabler Länge auffüllen Java Basics - Anfänger-Themen 6
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
C Datentypen Array mit dynamischer Länge? Java Basics - Anfänger-Themen 14
M Länge der Strecke zwischen zwei Punkten Java Basics - Anfänger-Themen 10
P länge von array abfragen? Java Basics - Anfänger-Themen 2
D Erste Schritte Warum wird bei einem Array die Länge über Length ausgegeben? Java Basics - Anfänger-Themen 6
M Länge String Java Basics - Anfänger-Themen 3
A Länge einer Hexadezimalzahl in Bits Java Basics - Anfänger-Themen 40
P String- Länge Java Basics - Anfänger-Themen 3
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
Gossi Datentypen Länge von Zahlentypen Java Basics - Anfänger-Themen 3
G Array mit zufälliger Länge Java Basics - Anfänger-Themen 4
S Datentypen String mit fester Länge (Rückgabewert einer Methode) Java Basics - Anfänger-Themen 2
D Array anlegen ohne bekannte Länge? Java Basics - Anfänger-Themen 6
S ArrayList länge lässt sich nicht voreinstellen Java Basics - Anfänger-Themen 10
F String begrenzte Länge??? Java Basics - Anfänger-Themen 16
N List länge Java Basics - Anfänger-Themen 6
DStrohma Binärwörter der Länge n ausgeben Java Basics - Anfänger-Themen 3
A array und seine länge Java Basics - Anfänger-Themen 5
G länge von string, string aus integer/char Java Basics - Anfänger-Themen 6
G Länge einer Enumeration feststellen Java Basics - Anfänger-Themen 15
T Länge von Strings im Array vergleichen Java Basics - Anfänger-Themen 2
N Array bei unbekannter Länge Java Basics - Anfänger-Themen 4
M unerklärbarer Fehler bei Array-Länge Java Basics - Anfänger-Themen 4
R Frage zur Länge von Textfeld und String Java Basics - Anfänger-Themen 4
G Warum hat char die Länge 2? Java Basics - Anfänger-Themen 9
B JTable - Einstellen der Größe bzw. der Länge Java Basics - Anfänger-Themen 1
J Char-Array mit variabler Länge zurückliefern. Java Basics - Anfänger-Themen 11
G Keine feste Länge bei Objekten, warum nur Zeiger? Java Basics - Anfänger-Themen 8
F ArrayList Länge ermitteln und ausgeben Java Basics - Anfänger-Themen 13
M länge von wörtern betimmen Java Basics - Anfänger-Themen 20
NightmareVirus Länge einer Integerzahl bestimmt Java Basics - Anfänger-Themen 6
B 2D Punkte erstellen und ihre Länge berechnen/Problem this. Java Basics - Anfänger-Themen 3
L String konstante Länge? Java Basics - Anfänger-Themen 4
R maximale Länge des INHALTS im JTextField Java Basics - Anfänger-Themen 2
R String[][] mit variabler länge Java Basics - Anfänger-Themen 4
G länge einer audiodatei herausfinden Java Basics - Anfänger-Themen 3
M Maximale String länge finden? Java Basics - Anfänger-Themen 8
G Array-Länge bei Erzeugung noch unbekannt - wie erzeugen? Java Basics - Anfänger-Themen 12
J Arrays mit unbekannter Länge Java Basics - Anfänger-Themen 2
B String aus Datei lesen + Länge berechnen Java Basics - Anfänger-Themen 2
N Ermitteln der Spaltenbreite => DATE-Spalte hat Länge 8 ?! Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben