# Wert auf Nachkomma prüfen



## Sibylle (22. Okt 2010)

Guten Tag,

ich suche Hilfe zu folgenden Punkten:

A. Es soll geprüft werden, ob das Ergebnis einer Rechenoperation eine Kommazahl ist oder eine Zahl mit Punkt Null. Das Ergebnis wird in einer double-Variablen gespeichert. Ist es ein Wert mit Punkt Null, dann soll eine Integervariable den Wert erhalten, im anderen Fall bleibt der Wert in der double-Variablen.

B. Der Wert einer double-Variablen soll in einem Textfeld mit nur 2 Nachkommastellen kaufmännisch gerundet werden.

Ich würde mich sehr freuen, wenn ich zu den beiden Fragen eine Lösung erhalten könnte.

Besten Dank im voraus.

Gruß

Sibylle


----------



## vladimir (22. Okt 2010)

Das ist ansich nicht sehr schwer.

Beispiel für die Bestimmung der Restes (Einfacher Ansatz nicht getestet)

```
double ergebnis = 3.076;
int ergebnisInt = (int)ergebnis;

if((ergebnis-ergebniInt)==0.0) 
  int intVar=ergebnisInt;
else 
  double doubleVar= ergebnis;
```

Die Formatierung übernehmen die Format Klassen von Java.
Hier in Java-Insel nachlesen: 
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 4.9 Formatieren von Ausgaben

Ich hoffe der Rest ist selbstverständlich!

Gruß Vladimir


----------



## mariusbopp (22. Okt 2010)

also erstmal das kürzen auf 2 nachkommastellen geht wie follgt:

```
test.java

    public class Test 
    { public static void main( String[] args ) 
      { System.out.println( java.lang.Math.round( 300.697 * 100 ) / 100. ); }}
System.out

    300.7
```

hilfts weiter? ???:L


----------



## Marco13 (22. Okt 2010)

Die "einfachen" Ansätze könnten wegen der Rundingsfehler zu Problemen führen - und nicht zuletzt auch weil ein Double vieeel größere Zahlen speichern kann als ein int.

Vielleicht sowas wie in testB ?

```
public class DigitTest
{
    public static void main(String args[])
    {
        double d = 0.0;
        for (int i=0; i<10; i++)
        {
            d += 0.1;
        }
        System.out.println(testA(d));
        System.out.println(testB(d));

        System.out.println(testA(1e10));
        System.out.println(testB(1e10));

        System.out.println(testA(0.25));
        System.out.println(testB(0.25));

        System.out.println(testA(-1.9));
        System.out.println(testB(-1.9));
    }

    private static boolean testA(double d)
    {
        int dInt = (int)d;
        return (d-dInt)==0.0;
    }

    private static boolean testB(double d)
    {
        double e = Math.round(d);
        return Math.abs(d-e) < 1e-15;
    }
}
```


----------



## Landei (22. Okt 2010)

Frage A) 
	
	
	
	





```
boolean keineNachkommastellen = Math.ceil(x) == Math.floor(x)
```

(natürlich geht auch x == Math.floor(x), aber das stört mein Symmetrie-Empfinden  )


----------



## Marco13 (22. Okt 2010)

Auch da würden ggf. die "0.999999 ist eigentlich 1"-Fehler zuschlagen...!?


----------



## Sibylle (23. Okt 2010)

Guten Abend an alle Ideenlieferer,

ich freue mich sehr über alle Beiträge, die zu meinem Thema zu lesen sind.
Das Problem ist damit gelöst, ich ein kleines Stück weiter gekommen.
Vielen Dank dafür.
Ein schönes Wochenende.

Gruß

Sibylle


----------

