2016-10-24 2 views
0

In unserer Anwendung Skalierung Problem, müssen wir, ob die angegebene Zahl in Bereich prüfen ist oder nicht und dafür haben wir unten Code verwenden -in BigDecimal (Java) für Exponentialnotation

boolean isValidRangeNumber(Double no,int precision, int scale){ 
      BigDecimal bigDecimal = new BigDecimal(no.toString()); 
      int intPartLength = precision - scale; 
      int size = (bigDecimal.longValue() + "").toString().length(); 

      if(bigDecimal.precision() <= precision && bigDecimal.scale() <= scale && size <= intPartLength) 
       return true; 

      return false; 
     } 

Aber wenn wir rufen isValidRangeNumber(0.0000009, 10,7) als sein Versagen als bigDecimal.scale() gibt 8, die maximal 7 sein kann, während es eine gültige Nummer ist. Bitte schlage vor, was mit dieser BigDecimal-Nutzung nicht stimmt.

+0

erklären kann, was die Validierung tun soll? Es ist schwer, korrektes Verhalten von fehlerhaftem Code abzuleiten. – Henry

+0

überprüft, ob die eingegebene Zahl Ziffern vor und nach dem Komma benötigt. –

Antwort

1

Wenn Sie inspect folgende:

bigDecimal.toPlainString() // This will show 0.00000090 -> scale of 8, appends trailing 0 

Wegen einer zusätzlichen Hinter Null, Zustand nach Ergebnis falsch.

bigDecimal.scale() <= scale // 8 <= 7 

Sie können in folgenden ändern:

boolean isValidRangeNumber(Double no, int precision, int scale) { 
    BigDecimal bigDecimal = new BigDecimal(no.toString()).stripTrailingZeros(); //Get rid of trailing zeros 
    bigDecimal.toPlainString(); 
    int intPartLength = precision - scale; 

    int size = (bigDecimal.longValue() + "").toString().length(); 

    if (bigDecimal.precision() <= precision && bigDecimal.scale() <= scale 
      && size <= intPartLength) 
     return true; 

    return false; 
} 
+0

Ja, indem Sie das tun, geben Sie die richtige Skalierung, aber es wäre gut, wenn Sie ein kurzes über dieses Verhalten von BigDecimal und warum bigDecimal.precision() gibt 2, die 1 (Anzahl der signifikanten Ziffern) sein sollte –

+0

That I Zweifeln Sie, dass Sie weiter in die Dokumentation von BigDecimal schauen müssen. –

+0

Danke Sanchi .. :) –