# Zahlen vergleichen



## BullFrogg (10. Jul 2006)

So ich hab mal wieder ein Problem =)

ich suche nach einer möglichkeit, wie ich 2 zahlen vergleichen kann die sich im idealfall bis auf mehrere hundert kommastellen gleichen, aber eben nicht auf alle, um dann die zahl nur bis zu der kommastelle ausgeben, wo die anderen beiden sich noch gleichen.

Also im Klartext:

zahl1: 4.113425902
zahl2: 4.1134*55984*

Ausgabe: 4.1134

Ich habe mir überlegt alle dezimalen einer zahl in einer array zu speichern und dann die werte für die indexe zu vergleichen und dann falls zahl1[100] ungleich zahl2[100], den index zurückgeben und die zahl dann bis zu der indexten stelle auszugeben. aber das ist verdammt rechenintensiv und die geschwindigkeit ist ein sehr wichtiges kriterium.

Hat einer eine idee?

Grüße


----------



## byte (10. Jul 2006)

Als was liegen die Zahlen denn vor? Als Strings? Dann müsste es einfach mit compare() klappen.


----------



## dieta (10. Jul 2006)

Das könnte so klappen:


```
double zahl1 = ...;
double zahl2 = ...;
String z1 = Double.toString(zahl1);
String z2 = Double.toString(zahl2);
StringBuffer out = new StringBuffer();
int len = 0;
if(z1.length() > z2.length())
{
    len = z2.length();
}
else
{
    len = z1.length();
}
for(int i=0; i<len; i++)
{
    if(z1.charAt(i) == z2.charAt(i))
    {
        out.append(z1.charAt(i));
    }
    else
    {
        break;
    }
}
String ergebnis = out.toString();
if(ergebnis.endsWith(".")) ergebnis = ergebnis.substring(0, ergebnis.length()-1);
```

[edit]
Und gegen die paar hundert Nachkommastellen:

```
import java.math.*;

...

BigDecimal zahl1 = ...;
BigDecimal zahl2 = ...;
String z1 = zahl1.toString();
String z2 = zahl2.toString();
StringBuffer out = new StringBuffer();
int len = 0;
if(z1.length() > z2.length())
{
    len = z2.length();
}
else
{
    len = z1.length();
}
for(int i=0; i<len; i++)
{
    if(z1.charAt(i) == z2.charAt(i))
    {
        out.append(z1.charAt(i));
    }
    else
    {
        break;
    }
}
String ergebnis = out.toString();
if(ergebnis.endsWith(".")) ergebnis = ergebnis.substring(0, ergebnis.length()-1);
```
[/edit]


----------



## byte (10. Jul 2006)

"könnte" ... wenn die Zahlen nicht ein paar hundert Nachkommastellen haben würden. Die passen wohl in kein double.


----------



## BullFrogg (10. Jul 2006)

ja sind in BigDecimal, müsste dann ja aber auch klappen.

```
out.append(z1.charAt(i));
```

den teil versteh ich nicht ganz. was macht diese methode? ich dachte sie fügt hinzu? ich müsste die übereinstimmenden zahlen ja in einer neuen variable schreiben oder?

Grüße


----------



## BullFrogg (10. Jul 2006)

Ok, jetzt hab ichs verstanden hatte das 
	
	
	
	





```
StringBuffer out = new StringBuffer();
```
 übersehen. ich probiers mal aus.


----------

