Hallo zusammen
Bin mich gerade etwas mit dem (leidigen) Thema des Rundens am beschäftigen, bzw. selber Methoden am schreiben, die die Klasse Math verwenden.
Habe eine Methode implementiert, die auf eine beliebige Anzahl Nachkommastellen runden kann, das war auch ziemlich einfach:
Nun möchte ich noch eine folgende Methode implementieren (hab dazu schon etwas Pseudocode geschrieben):
Ich scheitere schon beim ersten Punkt.. anstatt mir die korrekte Anzahl Stellen vor dem Komma zu liefern, "endet" das Ganze in einer Endlosschleife, d.h. count wird anhaltslos erhöht, dabei sollte doch z.B. bei der Eingabe von 102.2 count den Wert 3 erhalten. Was mache ich falsch?
Das Ziel wäre, je nachdem, wie viel Vorkommastellen (integers) bzw. Nachkommastellen (decimal places) eine Zahl hat, das Komma zu schieben und dann die Zahl mit Math.round() zu runden, danach das Komma wieder "zurückzuschieben". Bis jetzt habe ich nicht herausgefunden, wie ich das für Werte wie z.B. 2324.34 auf der einen Seite und Werte wie 0.0034 auf der anderen Seite mit dem gleichen Algorithmus lösen kann, deshalb ist bis jetzt nur der Weg für den ersten Fall erläutert.
Bin mich gerade etwas mit dem (leidigen) Thema des Rundens am beschäftigen, bzw. selber Methoden am schreiben, die die Klasse Math verwenden.
Habe eine Methode implementiert, die auf eine beliebige Anzahl Nachkommastellen runden kann, das war auch ziemlich einfach:
Java:
/**
* Rounds a certain value to the number of decimal_places
* Returns a string containing the rounded number and a decimal point
**/
public static String toDecimalPlace(double value, int decimal_places){
// compute the mover
int mover = (int)Math.pow(10, decimal_places);
// round
int rounded = (int)Math.round(value*mover);
String output = ""+rounded/mover;
int fraction = rounded%mover;
// look for decimal places
if(decimal_places > 0){
output += ".";
// check zeros, write fraction
for(int n=1; n < decimal_places; n++){
if(fraction < Math.pow(10, n))
output += ("0");
}
output += fraction;
}
return output;
}
Nun möchte ich noch eine folgende Methode implementieren (hab dazu schon etwas Pseudocode geschrieben):
Java:
/**
* Rounds a certain value to a number with a certain precision
* E.g. a value of 0.503 with a precision of 2 would return 0.5, or a value of 2307.4 with a precision of 3
* would return 2310.
**/
public static void toPrecision(double value, int precision){
// find out how many integers there are
int count = 0;
while((int)(value/Math.pow(10,count)) != 0){
count++;
}
// move the decimal point for rounding
// difference = precision - count
// multiply value with 10^difference
// round using math.round()
// move back the decimal point
}
Ich scheitere schon beim ersten Punkt.. anstatt mir die korrekte Anzahl Stellen vor dem Komma zu liefern, "endet" das Ganze in einer Endlosschleife, d.h. count wird anhaltslos erhöht, dabei sollte doch z.B. bei der Eingabe von 102.2 count den Wert 3 erhalten. Was mache ich falsch?
Das Ziel wäre, je nachdem, wie viel Vorkommastellen (integers) bzw. Nachkommastellen (decimal places) eine Zahl hat, das Komma zu schieben und dann die Zahl mit Math.round() zu runden, danach das Komma wieder "zurückzuschieben". Bis jetzt habe ich nicht herausgefunden, wie ich das für Werte wie z.B. 2324.34 auf der einen Seite und Werte wie 0.0034 auf der anderen Seite mit dem gleichen Algorithmus lösen kann, deshalb ist bis jetzt nur der Weg für den ersten Fall erläutert.