2012-06-05 80 views
10

我想驗證一個大小數的精度和比例。如何通過BigDecimal驗證精度和縮放比例?

我期待驗證一個大的小數不會超過10的精度或2的比例。我試着做一個maxlength,所以這個值不會違反我的db長度約束,但是無法獲得也可以工作。有人能指出我解決這個問題的方向嗎?

+0

也許像NUMBER(10,2)(甲骨文基礎上,雖然)? –

+0

我們使用sybase,所以不太瞭解Oracle。我只是想在java中用if語句構建一個字段驗證器來測試並確保提交的值不超過10,2。 –

回答

23

BigDecimal類有三個方法,這可能會感興趣的是:

  • precision(),它返回的位數的非標度值(例如,對於數123.45,返回的精度爲5 )
  • scale(),當正數(scale()可以是負值時,返回小數點後的小數位數,在這種情況下,數字的非縮放值乘以十的倍數的倍數,例如,-3的縮放表示未縮放的值乘以1000),
  • stripTrailingZeros(),它返回一個BigDecimal以及從表示中刪除的所有尾隨零。

例如,計算對於給定的BigDecimal B中的精度和規模,我們可以寫這樣的事情:

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

這正是我所尋找的,我完全錯過了api的規模和精度。對我感到羞恥。 –

+0

@Teetoo,@George - 你不覺得'if'塊 - 'scale = 0;'和'precision - = scale;'應該交換嗎? – Premraj

+0

@Teetoo我做了改變,查看它:) – Premraj