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
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
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
Hãy thử BigDecimal.remainder:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal fraction = d.remainder(BigDecimal.ONE);
System.out.println(fraction);
// Outputs 0.5649
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
.
Đó là công việc ... cảm ơn :) – Mehdi
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);
Đ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
@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ì. –
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
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'. –
@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). –