2015-09-29 15 views
5

In java come ottengo la prima cifra diversa da zero di un BigDecimal?Come ottenere la prima cifra non nulla di un BigDecimal

Ad esempio:

0.001 => 1 
0.02 => 2 
987.654 => 9 

Per i numeri compresi tra 0 e 1 questo lavoro:

bigDecimal.scaleByPowerOfTen(bigDecimal.precision()).setScale(0, RoundingMode.DOWN) 

Per i numeri più grandi di 1 questo funzionerà:

bigDecimal.scaleByPowerOfTen(1-bigDecimal.precision()).setScale(0, RoundingMode.DOWN) 

ma c'è una soluzione, che funziona per qualsiasi numero?

+1

magari prendere 'bigDecimal.toPlainString()' e trovare la prima cosa che non è un punto zero o. –

+0

come metterlo in una stringa, sostituendo tutti gli 0 e. con niente e buttando fuori il primo char? – ergonaut

+0

@LucasRoss Dovrei anche occuparmi del segno "-", ecc. E la conversione in stringa sembra molto simile a una "soluzione", non come una "soluzione" ... – slartidan

risposta

4

Ecco una soluzione che utilizza solo BigDecimal e int:

BigDecimal value = new BigDecimal(0.021); //input your value here 

int scale = value.scale(); 
int precision = value.precision(); 
int result = value.movePointLeft(precision-scale-1).abs().intValue(); //this will generate the result you need 
+2

Basta inserire un Math.abs alla fine. – laune

+0

@laune Grazie per averlo indicato! Il BigDecimal ha già un metodo 'abs()' che ho aggiunto. –

2

E 'possibile convertire BigDecimal in char[] e verificare i numeri utilizzando un ciclo. Guarda il seguente esempio.

BigDecimal bigDecimal = new BigDecimal(5220.33); 

    char[] chars = String.valueOf(bigDecimal).toCharArray(); 
    for (char c : chars) { 
     if (Character.isDigit(c) ? Character.getNumericValue(c) != 0 : false) { 
      System.out.println("First number is : " + c); 
      return; 
     } 
    } 
Problemi correlati