2012-06-05 6 views
10

Ich versuche, die Genauigkeit und Skalierung einer großen Dezimalzahl zu validieren.Wie validiere ich die Genauigkeit und Skalierung mit BigDecimal?

Ich überprüfe, ob eine große Dezimalzahl eine Genauigkeit von 10 oder eine Skalierung von 2 nicht überschreitet. Ich habe versucht, eine maxlength, also würde der Wert meine DB-Längenbeschränkungen nicht verletzen, konnte aber nicht erhalten das funktioniert entweder. Könnte mich jemand freundlich auf die Lösung dieses Problems hinweisen?

+0

vielleicht wie NUMBER (10,2) (Oracle Basis, obwohl)? –

+0

Wir verwenden Sybase, also nicht wirklich sicher über Oracle. Ich versuche gerade, einen Feld-Validator in Java mit einer if-Anweisung zu erstellen und sicherzustellen, dass der übergebene Wert 10,2 nicht überschreitet. –

Antwort

23

Die BigDecimal Klasse hat drei Methoden, die von Interesse für diese sein könnte:

  • precision(), die die Anzahl von Ziffern für den unskalierten Wert (beispielsweise zurückgibt, für die Nummer 123.45 ist die Genauigkeit ergab 5)
  • scale(), die die Anzahl der Stellen nach dem Dezimaltrennzeichen zurückgibt, wenn positiv (scale() kann negativ sein, in diesem Fall wird der unscaled Wert der Zahl mit der Macht der Negation der Skala mit zehn multipliziert. Zum Beispiel , eine Skala von -3 bedeutet, dass der unskalierte Wert mit 1000 multipliziert wird,
  • stripTrailingZeros(), die eine BigDecimal mit alle nachgestellten Nullen aus der Darstellung entfernt zurückgibt.

Zum Beispiel die Genauigkeit und Maßstab für einen gegebenen BigDecimal b zu berechnen, wir so etwas schreiben:

BigDecimal noZero = b.stripTrailingZeros(); 
int scale = noZero.scale(); 
int precision = noZero.precision();  
if (scale < 0) { // Adjust for negative scale 
    precision -= scale; 
    scale = 0;   
} 
+0

Genau das habe ich gesucht, ich habe den Maßstab und die Präzision in der API völlig vermisst. Schande über mich. –

+0

@Teetoo, @George - Denkst du nicht in 'if' block -' scale = 0; 'und' precision - = scale; 'sollte getauscht werden? – Premraj

+0

@Teetoo Ich habe die Änderung, überprüfe es :) – Premraj

Verwandte Themen