Wert auf Nachkomma prüfen

Sibylle

Mitglied
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

Aktives Mitglied
Das ist ansich nicht sehr schwer.

Beispiel für die Bestimmung der Restes (Einfacher Ansatz nicht getestet)
Java:
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

Bekanntes Mitglied
also erstmal das kürzen auf 2 nachkommastellen geht wie follgt:
Java:
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

Top Contributor
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 ?
Java:
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

Top Contributor
Frage A)
Java:
boolean keineNachkommastellen = Math.ceil(x) == Math.floor(x)

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

Sibylle

Mitglied
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
 

Neue Themen


Oben