Aus int-Zahl bestimmte Stelle rausgreifen

Sorry hab ich übersehen :rolleyes:

Insebsondre kannte ich die log10 Methode noch nicht scheint wohl
ne Methode aus der 1.5er API zu sein?

Gruß

RedWing
 
Hallo!

Jap log10 gibts erst seit 5.0.
Es ist aber nicht schwer seinen eigenen 10er Logarithmus zu implementieren:
Code:
public class LogTest {

	private final static double LN_10 = Math.log(10.0D);

	public static void main(String[] args) {
		System.out.println(log10(10000)); // 4
	}

	private static double log10(double i) {
		return Math.log(i) / (LN_10);
	}
}

Gruß Tom
 
Ein schnellkurs Mathematik - wie praktisch.

Der Zehnerlogarithmus liefert die Anzahl der Stellen einer Zahl im Dezimalsystem - mal ganz grob (sprich abgerundet) gesagt. Der 2er Logarithmus würde das zu einer Zahl im Dualsystem liefern und der natürliche Logarithmus zu einer Zahl mit der Basis e (Eulersche Zahl).

Code:
private static int getFigure(int zahl, int i,int log) {
		return (int) ((zahl / Math.pow(10.0, log - i))) % 10;
}
Dieser Codeabschnitt liefert die Dezimalstelle. Dabei wird die Zahl durch die 10er Potenz der Stelle geteilt, die man haben will.

11511 teilt man also durch 100 wenn man die 5 haben will. Das Resultat ist: 115.11. Das ganze wird Modulo 10 genommen (% 10), d.h. man bestimmt den Rest, wenn man durch 10 teilt. Der Rest einer Division durch 10 ist die letzte Stelle vor dem Komma plus alles was danach kommt. Im Beispiel 5.11. Das ganze wird dann nach (int) gecastet was ein wegschneiden der Nachkommastellen zur Folge hat. Das Resultat ist 5.
Ich hoffe das hat jetzt jeder Verstanden.

nun der Logarithmus. Vor Java 5 gibt es nach Thomas nur den natürlichen Logarithmus. Jetzt gilt aber glücklicherweise: log10(zahl) = log(zahl)/log(10). Geht mit jedem anderen Logarithmus auch, d.h. ld(zahl)=log(zahl)/log(2) für den 2er Logarithmus. Wenn jemand einen Beweis will, suche ich ihn.

Und zum Schluß:
Glückwunsch Thomas, sehr elegante Lösung!
 
Zurück