Mehr als drei Nullen nach dem Punkt?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
kann mir jemand sagen, warum ich mit dieser Suchoperation die drei Nullen nach dem Punkt nicht finde?
Hier ist die Suchanweisung, die in die Datei guckt und nach der Zahl sucht, mit drei Nullen nach dem Punkt:
Code:
Pattern p1 = Pattern.compile(".*\\.[0]{3}",Pattern.CASE_INSENSITIVE);  
Matcher m1 = p1.matcher(laengeNachDemKommaLLIMITS);

Die Zahl sieht z.B. so aus, die gefunden werden soll:
Code:
0.000624
Wenn ich eine Zahl mit zwei Nullen oder mit einer nach dem Punkt suche, dann wird diese Zahl gefunden, nur wenn es mehr als drei sind, dann nicht?!

Kann mir jemand helfen?
 
funktioniert
Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        String laengeNachDemKommaLLIMITS = "0.000624";
        Pattern p1 = Pattern.compile(".*\\.[0]{3}",Pattern.CASE_INSENSITIVE);  
        Matcher m1 = p1.matcher(laengeNachDemKommaLLIMITS);
        System.out.println(m1.find());
    }

}
soll jetzt jemand hellsehen, was in deiner Datei steht oder wie du die Datei falsch einliest? 😉
 
Ich weiß nicht warum der ab drei Nullen Probleme macht, gibts vielleicht eine andere Möglichkeit abzufragen, wieviele Nullen nach dem Komma sind?
 
es gibt noch DecimalFormat und du kannst manuell die Zeichen anschauen
 
Moin,
ich komm hier irgendwie nicht weiter, wie soll ich denn nun alle Zahlen um zwei Stellen nach den Nullen runden,
z.B.
Code:
        12.24654 soll auf 12.25 gerundet werden
        0.125584 soll auf 0.13 gerundet werden
        0.046454 soll auf 0.046 gerundet werden
        0.008896 soll auf 0.0089 gerundet werden
        0.0004532 soll auf 0.00045 gerundet werden,
also wie gesagt zwei Stellen nach den Nullen (ob + oder - beides soll akzeptiert werden) und wenn die Zahl, so wie oben 12.24654 ist oder auch größer, diese soll dann auch zwei Stellen nach dem Komma gerundet werden.
Kann mir jemand bitte helfen?
 
wenn Zahl > 1, dann ist das Runden klar,

ansonsten die Zahl solange mit 10 multiplizieren bis sie > 1 ist,
und mit dieser Information die Originalzahl auf die richtige Anzahl der Stellen runden
 
mal grob

Code:
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;


public class Test  {
	
public static void main(String[] args) {
	   
	DecimalFormat f = new DecimalFormat();
	f.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ENGLISH));
	f.setMinimumFractionDigits(2);
	f.setMaximumFractionDigits(2);
	
	double[] zahlen = {12.24654d, 0.125584d, 0.046454d, 0.008896d,0.0004532d};
	
	for(double zahl:zahlen){
			if(zahl<0.001d){
			f.setMinimumFractionDigits(5);
			f.setMaximumFractionDigits(5);
		}else if(zahl<0.01d){
			f.setMinimumFractionDigits(4);
			f.setMaximumFractionDigits(4);
		}else if(zahl<0.1d){
				f.setMinimumFractionDigits(3);
				f.setMaximumFractionDigits(3);
		}else{
			f.setMinimumFractionDigits(2);
			f.setMaximumFractionDigits(2);
		}
		System.out.println(zahl +" soll auf "+f.format(zahl)+ " gerundet werden");
		
	}
  
}
}

das kann man sicher noch mit rechnen vereinfachen...
 
Ich hab dat jetzt so gemacht wie SlaterB gesagt hat, aber bei mir kommt immer eine 1 raus ganz am Ende der Zahl, z.b. wird aus dieser Zahl
0.0000013625496
1.3625496000000001<--genau diese 1, ich weiß nicht wie die entsteht, die soll aber weg!!??
Hier ist der Quellcode
Code:
double myDouble = 0.0000013625496;
        int countMulti = 0;
        int multiplitaktion = 1;
            
        
        while(myDouble < 1)
        {
            myDouble = myDouble*10;
            System.out.println(myDouble);
            countMulti++;            
        }        
        
        while(countMulti != 0)
        {            
            multiplitaktion = multiplitaktion * 10;
            countMulti--;
        }
        
        if(myDouble > 1)
        {
           
                double test = Math.round(myDouble*100);
                myDouble = test/100;
            //und die Zahl wieder die solange aufmultipliziert wurde bis diese > 1 ist, dann auf zwei Nachkommastellen gerundet
            //wurde und nun wieder auf die Nachkommastellen wieder zurück dividiert werden muss
                myDouble = myDouble/multiplitaktion;
                System.out.println(myDouble);               
        }
Danke schon mal im Voraus!
 
Java-double-Rechnung ist nunmal von Rundungsfehlern behaftet,
da kann man kaum was gegen machen
außer mit BigDecimal zu rechnen oder mit DecimalFormat als String darzustellen und zurückzuparsen
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben