2012-04-30 41 views
7

Làm cách nào để trích xuất một số sau dấu thập phân bằng BigDecimal?Trích xuất số thập phân trong BigDecimal

BigDecimal d = BigDecimal.valueOf (1548.5649);

kết quả: chỉ trích: 5649

+2

Lưu ý: Bạn nên sử dụng 'BigDecimal.valueOf ("1548,5649");' thay vì chuyển đổi giữa 'double' và 'BigDecimal' có thể gây ra các phản ứng phụ lạ. Nếu bạn cần độ chính xác, hãy tránh 'double' và' float'. –

+1

@AaronDigulla Tôi nghĩ bạn có nghĩa là BigDecimal mới ("1548.5649") vì không có phương thức BigDecimal.valueOf (String). –

Trả lời

10

Hãy thử:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());  
System.out.println(result); 

in:

5649 
6

Hãy thử BigDecimal.remainder:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal fraction = d.remainder(BigDecimal.ONE); 
System.out.println(fraction); 
// Outputs 0.5649 
+0

màn hình hiển thị: 1548.564900000000079671735875308513641357421875 – Mehdi

+1

Hiển thị '0,5649' cho tôi. –

+0

Có sự thật :) Cảm ơn;) – Mehdi

4

này nên làm như lừa:

d.subtract(d.setScale(0, RoundingMode.FLOOR)); 

setScale() vòng số để zero chữ số thập phân, và mặc dù tên của nó, không làm thay đổi giá trị của d.

+0

Đó là công việc ... cảm ơn :) – Mehdi

-1

cố gắng sử dụng d.doubleValue() để nhận giá trị gấp đôi

+2

nó trả về cùng một số: 1548.5649 – Mehdi

0

Bạn không biết bạn muốn kết quả là loại nào. Cách đơn giản nhất có lẽ là để chuyển đổi BigDecimal thành một String, và tham gia một chuỗi con:

String s = d.toPlainString(); 
int i = s.indexOf('.'); 
if (i < 0) { 
    return ""; 
} 
return s.substring(i + 1); 
+0

Điều này chỉ hoạt động cho một Ngôn ngữ sử dụng. làm dấu tách thập phân. Nhưng có Locales đang sử dụng,. – BetaRide

+0

@BetaRide: Tôi biết rằng, tôi đang nói tiếng Pháp và dấu phẩy được sử dụng ở đây. Nhưng BigDecimal.toPlainString() không phải là địa phương nhận thức. Nó sử dụng dấu chấm như dấu phân tách thập phân cho dù ngôn ngữ là gì. –

1

Nếu giá trị là tiêu cực, sử dụng d.subtract(d.setScale(0, RoundingMode.FLOOR)) sẽ trả về một số thập phân sai.

Sử dụng này:

BigInteger decimal = 
       d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger(); 

Nó trả 5649 cho 1548.5649 hoặc -1548.5649

Các vấn đề liên quan