2015-09-29 16 views
5

Trong java làm thế nào để tôi nhận được chữ số đầu tiên khác 0 của BigDecimal?Làm thế nào để có được chữ số đầu tiên khác 0 của một BigDecimal

Ví dụ:

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

Đối với số giữa 0 và 1 này sẽ làm việc:

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

Đối với các số lớn hơn 1 này sẽ làm việc:

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

Nhưng có một giải pháp, hoạt động cho bất kỳ số nào?

+1

lẽ mất 'bigDecimal.toPlainString() 'và tìm điều đầu tiên mà không phải là một dấu chấm không hay. –

+0

cách đặt nó vào một chuỗi, thay thế tất cả 0 và. không có gì, và bán phá giá đầu tiên? – ergonaut

+0

@LucasRoss Tôi cũng sẽ phải chăm sóc "-" dấu hiệu, vv Và chuyển đổi sang chuỗi có vẻ giống như một "workaround", không giống như một "giải pháp" ... – slartidan

Trả lời

4

Dưới đây là một giải pháp sử dụng chỉ BigDecimalint:

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

Chỉ cần ném vào Math.abs ở cuối. – laune

+0

@laune Cảm ơn bạn đã chỉ ra điều đó! BigDecimal đã có phương thức 'abs()' mà tôi đã thêm vào. –

2

Có thể chuyển đổi BigDecimal thành char[] và kiểm tra các số bằng vòng lặp. Hãy xem ví dụ sau.

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; 
     } 
    } 
Các vấn đề liên quan