BigDecimal < 0

Isnogud

Mitglied
Hallo!
Ich hab ein Problem! Und zwar möchte ich abfragen, ob "number" negativ ist oder nicht.
Leider kennt BigDecimal "<" nicht und der Compiler sagt mir als Fehler:

the operator < is undefined for the argument type(s) java.math.BigDecimal, java.math.BigDecimal


Java:
public boolean isNegative(BigDecimal number) {
		if (number < number.ZERO) {
		return true;
		}
	}

Wie kann ich denn nun abfragen, ob number < 0, sprich negativ ist?
 
G

Gast2

Gast
ZERO ist eine statische Konstante, daher sollte man die so nutzen: BigDecimal.ZERO.
Zwei BigDecimal Instanzen kannst du per compareTo vergleichen:
Java:
public boolean isNegative(BigDecimal number) {
  return number.compareTo(BigDecimal.ZERO) < 0;
}
 

Landei

Top Contributor
Java:
public boolean isNegative(BigDecimal number) {
  return number.signum() == -1;
}
 

Isnogud

Mitglied
Ha!
Das funktioniert aber so nicht. Leider.

Java:
	public boolean isNegative(BigDecimal number) {

		if (number.compareTo(BigDecimal.ZERO) < 0) {

			return true;
		}
		return false;

	}

So steht's jetzt bei mir.
Wenn der Wert true zurückgegeben wird, dann soll eine andere Methode erkennen dass number < 0 ist und die Fehlermeldung ausgeben, dass aus negativen Zahlen die Wurzel nicht gezogen werden kann.
Wird hingegen false zurückgegeben, sprich number ist eine positive Zahl, dann wird die Wurzel aus dieser gezogen.

Im Endeffekt ist das egal, weil ich eh keine Wurzel aus BigDecimal Zahlen ziehen kann, nur, wenn ich eine komplizierte Klasse dazu selber schreibe, ich möchte es nur gerne komplett haben falls ich diese Klasse doch irgendwann bereit bin zu schreiben.

//Moment, hab grad alles durcheinander gebracht
 
G

Gast2

Gast
Dann liegt der Fehler im Übergabeparameter, die Methode ist so korrekt:

Java:
public static void main(String[] args) {
	System.out.println(isNegative(BigDecimal.ONE));
	System.out.println(isNegative(BigDecimal.TEN));
	System.out.println(isNegative(BigDecimal.ZERO));
	System.out.println(isNegative(new BigDecimal("-1")));
	System.out.println(isNegative(new BigDecimal("-10")));
}

public static boolean isNegative(BigDecimal number) {
	if (number.compareTo(BigDecimal.ZERO) < 0) {
		return true;
	}
	return false;
}

EDIT:
Die Methode lässt sich noch kürzer schreiben, siehe mein Beispiel, oder das Beispiel von Landei.
 

Landei

Top Contributor
Erstens funktioniert das ganz wunderbar, zweitens funtioniert auch EikeB's Version prima, und drittens ist dein seltsames if-Konstrukt völlig redundant. Lerne ein wenig die Logik-Grundlagen und vermeide Regentänze, wenn du etwas nicht verstehst, sonst beglückst du deine Umwelt auch noch eines Tages mit einer YesNoFactory.
 
S

SlaterB

Gast
es gibt auch eine signum()-Methode, die sich nur bei Negativprüfung etwas eher anbietet, wird im compare auch verwendet:
Java:
    public int compareTo(BigDecimal val) {
	// Optimization: would run fine without the next three lines
	int sigDiff = signum() - val.signum();
	if (sigDiff != 0)
	    return (sigDiff > 0 ? 1 : -1);
insofern auch nicht schlimm, wenn compare genutzt wird (nicht dass es generell ein Problem wäre)


compare sollte funktionieren, equals ist bisschen fragwürdiger,
ein BigDecimal aus "0.00" ist nicht equal zu ZERO, auch Nachkommastellen werden verglichen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
I BigDecimal und Berechnungen weiterhin mit + / - usw. Java Basics - Anfänger-Themen 11
B TableView: laufender Saldo mit BigDecimal? Java Basics - Anfänger-Themen 6
I BigDecimal als Parameter verwenden Java Basics - Anfänger-Themen 3
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
A Kaufmännisches Runden mit BigDecimal Java Basics - Anfänger-Themen 14
G Compiler-Fehler BigDecimal Java Basics - Anfänger-Themen 5
AssELAss Datentypen BigDecimal Vergleichen ob Ergebnis >= 200 Java Basics - Anfänger-Themen 5
AssELAss Über ein Objekt vom Typ BigDecimal iterieren Java Basics - Anfänger-Themen 6
E BigDecimal PQ Formel Java Basics - Anfänger-Themen 16
H DecimalFormat mit BigDecimal? Java Basics - Anfänger-Themen 6
K Wurzelberechnung Newton BigDecimal Java Basics - Anfänger-Themen 2
W BigDecimal bei Rechnungen Java Basics - Anfänger-Themen 5
neurox BigDecimal setScale wird ignoriert Java Basics - Anfänger-Themen 2
N max(BigDecimal,BigDecimal) Java Basics - Anfänger-Themen 2
P Mit double und BigDecimal rechnen Java Basics - Anfänger-Themen 6
M JTable Spalte ist bigDecimal Java Basics - Anfänger-Themen 2
G BigDecimal -- exception Java Basics - Anfänger-Themen 3
G BigDecimal mit zwei Nachkommastellen darstellen Java Basics - Anfänger-Themen 2
H integer 2 bigdecimal ? Java Basics - Anfänger-Themen 2
A Problem mit BigDecimal? Java Basics - Anfänger-Themen 3
G sehr kleine Dezimalzahlen (BigDecimal) falsch angezeigt Java Basics - Anfänger-Themen 5
B BigDecimal Java Basics - Anfänger-Themen 6
B String to BigDecimal Java Basics - Anfänger-Themen 3
T Wissenschaftliche Notationen + BigDecimal Java Basics - Anfänger-Themen 5
T zwei BigDecimal vergleichen Java Basics - Anfänger-Themen 2
B Frage zu BigDecimal! dringend Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben