float/double Anzahl Nachkommastellen ermitteln

M

Max Matti

Gast
Hi,

Ich brauche gerade für mein Projekt eine Funktion, die die Anzahl der Nachkommastellen von einer Variable (float oder double) ermittelt, d.h.:

0,5 ->1
11,003 ->3
0,000 000 004 -> 9

Gibt es das in der Math-Klasse (alleine hab ichs nicht gefunden) oder muss ich das selber schreiben, wenn ja wie?

lg
Max
 

Runtime

Top Contributor
Musst du selber schreiben:
Code:
1. Modulo mit 1
2. Schleife mit int i = Anzahl Schleifendurchläufe
3. int wert anlegen mit Wert Math.pow(10, i) * floatWert
4. testen, ob wert == floatWert ist, wenn ja, dann Schleife abbrechen/beenden
Anzahl Nachkommastellen = i
 

XHelp

Top Contributor
Oder zu einem String machen und nach dem Komma splitten.
Musst nur aufpassen, dass der Wert nicht sowas wie 3.2E-20 ist. Also da vllt mit dem NumberFormat umwandeln und nicht einfach toString.
 

kirax

Bekanntes Mitglied
Musst du selber schreiben:
Code:
1. Modulo mit 1
2. Schleife mit int i = Anzahl Schleifendurchläufe
3. int wert anlegen mit Wert Math.pow(10, i) * floatWert
4. testen, ob wert == floatWert ist, wenn ja, dann Schleife abbrechen/beenden
Anzahl Nachkommastellen = i

Das geht schief, sobald es mehr als ~10 Nachkommastellen werden, da du dann an die Grenze von 2^31-1 stößt.
Und doubles können seehr viele Nachkommastellen haben.

Ich denke es ist sinnvoller, das über einen String zu lösen:
Java:
public int stellen(double d) {
  String s = Double.toString(d);
  s = s.substring(s.indexOf(",") + 1);
  return s.length();
}

Oder zu einem String machen und nach dem Komma splitten.
Musst nur aufpassen, dass der Wert nicht sowas wie 3.2E-20 ist. Also da vllt mit dem NumberFormat umwandeln und nicht einfach toString.
Da war wohl jemand schneller. Den Test auf die Darstellung muss man natürlich machen.
 
M

Max Matti

Gast
Hi,

Erstmal danke, dass so schnell so viele Antworten kamen.
Also übernehme ich den Quelltext von kirax und ersetze toString durch was?
(Das Programm, zu dem das gehört, rechnet mit einiger Genauigkeit, daher kann es auch sein, dass hinten e-* steht)

lg
Max
 

kirax

Bekanntes Mitglied
Was du auch noch checken müsstest ist der decimal separator. Im Deutschen ist das ein Komma, im Englischen schon ein Punkt.
Hab das noch nie gemacht, aber da gibts auch irgendwie ne Möglichkeit auf unterschiedliche locals zu reagieren.
 

Ark

Top Contributor
Wie genau brauchst du denn die Nachkommastellen? Und: Wie viele Nachkommastellen hat 1.0/3.0? Wenn es um Genauigkeit geht, sollte wohl eher BigDecimal herhalten (oder man zählt die signifikanten Stellen selbst mit).

Ark
 

StrikeTom

Bekanntes Mitglied
Auch noch eine möglichkeit wäre:
Java:
float a = (float) 2.2789;
		
		String[] asplit =  Float.toString(a).split("\\.");
		int nachkomma = asplit[1].length();
		System.out.println(nachkomma);
 
Zuletzt bearbeitet:

nrg

Top Contributor
Was du auch noch checken müsstest ist der decimal separator. Im Deutschen ist das ein Komma, im Englischen schon ein Punkt.
Hab das noch nie gemacht, aber da gibts auch irgendwie ne Möglichkeit auf unterschiedliche locals zu reagieren.

Java:
DecimalFormatSymbols.getInstance().getDecimalSeparator()
 
M

Max Matti

Gast
Das Problem hat man mit allen periodischen Zahlen.
Und Fließkommazahlen unterliegen sowieso einer Ungenauigkeit, die wahrscheinlich eh höher ist als die Toleranz um die es bei dem Problem geht ;)

Naja, es gibt mehrere Möglichkeiten, den Datentyp anzulegen, den ich aus dem float/double ziehen will: einmal über 2 Zahlen, die danach von der Funktion Dividiert werden [abc(5, 3) => 1u2/3] oder über ein float/double, was halt etwas ungenau ist, wenn man etwas genauer rechnen will, nimmt man halt die andere Möglichkeit...
 
Zuletzt bearbeitet von einem Moderator:
M

Max Matti

Gast
Hab es jetzt so gelöst:

Java:
	/*
	 * Constructs a Fraction out of a double.
	 * Example: 0.333 -> 333/1000
	 */
	public Fraction(double zahl) {
		for (int i = 1; true; i *= 10) {
			if ((double)(zahl*i) == Math.floor(zahl*i)) {
				this.numerator = (int)(zahl*i);
				this.denominator = i;
				break;
			}
		}
		
	}
 
M

Max Matti

Gast
Hi,

ich glaub du meinst ohne d, ich teste das mal, moment...

Edit: Gerade getestet, => 0 aber für solche Fälle hab ich:
Java:
	/*
	 * Constructs a Fraction with an long numerator and an long denominator.
	 * TODO: For constructing a Random Fraction use Fraction().
	 */
	public Fraction(long numerator, long denominator) {
		this.numerator = numerator;
		if (denominator == 0) {
			throw (new ArithmeticException("Denominator can't be 0."));
		}
		this.denominator = denominator;
	}

(und das gleiche noch mit ints)
 

Anhänge

  • Fraction.java
    6,5 KB · Aufrufe: 8
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Double or Float zusammenrechnen Java Basics - Anfänger-Themen 15
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
G double in float umwandeln Java Basics - Anfänger-Themen 2
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6
V Double schneller als Float? Java Basics - Anfänger-Themen 13
P Einem Double-Objekt einen float-Wert zuweisen Java Basics - Anfänger-Themen 2
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
M Float und double Java Basics - Anfänger-Themen 11
C Datentypen Float und Double Java Basics - Anfänger-Themen 2
F Array in double/float Java Basics - Anfänger-Themen 4
R switch erlaubt keine float/double-Rechnung Java Basics - Anfänger-Themen 5
W nach Eingabe prüfen: ob int, double,float,... Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B String to Float Java Basics - Anfänger-Themen 27
A Negative float Werte? Java Basics - Anfänger-Themen 10
J Float Frage Java Basics - Anfänger-Themen 1
K Überprüfen ob Eingabe ein Float ist Java Basics - Anfänger-Themen 4
V Variablen Genauigkeit von float Java Basics - Anfänger-Themen 3
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
MiMa String nach float Konvertieren Java Basics - Anfänger-Themen 23
S Math.ceil für float Java Basics - Anfänger-Themen 1
T Kann erbende Klasse Attribute der vererbenden Klasse anpassen (int -> float)? Java Basics - Anfänger-Themen 9
J Array zu float Java Basics - Anfänger-Themen 6
I Datentypen float-Grenzen (?) Java Basics - Anfänger-Themen 21
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
C Erste Schritte Eingabe mit Float Java Basics - Anfänger-Themen 1
M Datentypen Integer und Float Konflikt Java Basics - Anfänger-Themen 3
N Mehrdimensionales float Array aus .txt-Datei einlesen? Java Basics - Anfänger-Themen 17
V Datentypen Position mit Int und Float berechen und ausgeben Java Basics - Anfänger-Themen 5
P Variablen 2D float unterteilen Java Basics - Anfänger-Themen 3
W Variablen float rundet beim Bruch rechnen Java Basics - Anfänger-Themen 3
M Erste Schritte float-Array auslesen Java Basics - Anfänger-Themen 4
S byte to float Java Basics - Anfänger-Themen 4
J Falsche Darstellung von Float Java Basics - Anfänger-Themen 2
1 float Array deklarieren Java Basics - Anfänger-Themen 10
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
N Methoden String to Float Java Basics - Anfänger-Themen 3
G Queue mit int oder float Java Basics - Anfänger-Themen 3
Luk10 Unpräzise float-Werte Java Basics - Anfänger-Themen 10
U Nachbarzahl einer Float Java Basics - Anfänger-Themen 4
R Float Wertebereich Java Basics - Anfänger-Themen 3
T float[] in float Fehler Java Basics - Anfänger-Themen 6
B Datentypen Float ohne .0 ausgeben, sonstige Nachkommastellen aber erhalten Java Basics - Anfänger-Themen 4
K aus String mach Float funktioniert nicht warum? Java Basics - Anfänger-Themen 7
C Probleme mit float und int Java Basics - Anfänger-Themen 3
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
K float to String Java Basics - Anfänger-Themen 11
T Fehler beim Konvertieren (String --> Float) Java Basics - Anfänger-Themen 5
C Falsches Ergebnis float-Addition Java Basics - Anfänger-Themen 10
N Datentypen Warum Compilerfehler bei float f = 4.0; Java Basics - Anfänger-Themen 2
X Float ausgeben Java Basics - Anfänger-Themen 3
B Datentypen char, int, float in String Variable speichern Java Basics - Anfänger-Themen 4
S Datentypen float statt void Java Basics - Anfänger-Themen 3
J String => Float Problem Java Basics - Anfänger-Themen 10
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
D Datentypen Parse float[] to int[] Java Basics - Anfänger-Themen 4
S Long und Float Frage Java Basics - Anfänger-Themen 2
lenniii float[] Java Basics - Anfänger-Themen 2
S casten array in int von float Java Basics - Anfänger-Themen 5
P float Eingabe wird nicht akzeptiert, obwohl Variable als float deklariert Java Basics - Anfänger-Themen 2
M Vergleich Float-, Doublewert Java Basics - Anfänger-Themen 10
A text mit float ausgeben Java Basics - Anfänger-Themen 14
G float - Frage Java Basics - Anfänger-Themen 2
G Float schneidet nach dem Rechnen auf eine Stelle ab Java Basics - Anfänger-Themen 9
G String zu float oder int Java Basics - Anfänger-Themen 3
P Float wisenschaftliche Ausgabe/Exponenten Java Basics - Anfänger-Themen 2
G Float Nachkommazahlen vergleichen Java Basics - Anfänger-Themen 7
G PRoblem mit rekursiver float additions methode Java Basics - Anfänger-Themen 9
O Object in Float konvertieren Java Basics - Anfänger-Themen 2
F bei einem Float nur x Stellen nach dem Komma anzeigen ? Java Basics - Anfänger-Themen 7
D Formatierung: ganzzahlige Float Werte nach Int Java Basics - Anfänger-Themen 2
V Exponentieren mit Exponenten vom Typ float Java Basics - Anfänger-Themen 2
J einlesen von datei, float und array und und und. Java Basics - Anfänger-Themen 7
B Vector nach float[] casten Java Basics - Anfänger-Themen 6
S float in int umwandeln? Java Basics - Anfänger-Themen 4
N String -> float Java Basics - Anfänger-Themen 3
M Float-Zahl auf x Stellen beschränken Java Basics - Anfänger-Themen 6
M Problem mit float und nullzuweisung Java Basics - Anfänger-Themen 15
M Float in String umwandeln Java Basics - Anfänger-Themen 9
G float in int wandeln Java Basics - Anfänger-Themen 2
H float Java Basics - Anfänger-Themen 3
K Eingabe von float werten Java Basics - Anfänger-Themen 4
sambalmueslie Float.parseFloat Java Basics - Anfänger-Themen 5
G Frage zur Objekt-Wrapper Float ? Java Basics - Anfänger-Themen 6
R float Variable aus String Java Basics - Anfänger-Themen 8
D HILFE bei float to String Java Basics - Anfänger-Themen 6
& String to Float Java Basics - Anfänger-Themen 7
G Frage zur Eingabe von Float ? Java Basics - Anfänger-Themen 4
G float-Array _ohne_ Arrays.sort sortieren Java Basics - Anfänger-Themen 5
W String into Float Java Basics - Anfänger-Themen 7
D Zahlen von Typ float aus einer Textdatei lesen Java Basics - Anfänger-Themen 2
S Dumme Frage... String in Float umwandeln Java Basics - Anfänger-Themen 10
M Char to Float umwandeln. Java Basics - Anfänger-Themen 4
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben