Làm thế nào để chuyển đổi BigDecimal sang Double trong Java?


112

Làm thế nào chúng tôi chuyển đổi BigDecimalthành Doubletrong java? Tôi có một yêu cầu trong đó chúng tôi phải sử dụng Double làm đối số nhưng chúng tôi đang nhận được BigDecimalvì vậy tôi phải chuyển đổi BigDecimalthành Double.


10
Thế cònnew BigDecimal(2).doubleValue()
Matthias.

6
Luôn luôn đọc tài liệu trước khi đặt câu hỏi. Bạn thường sẽ thấy rằng câu hỏi của bạn đã được trả lời. Thấy chưa doubleValue(). (Gợi ý: để tìm tài liệu cho một lớp cụ thể, chỉ cần google tìm kiếm tên lớp, theo sau là java. Ví dụ: để tìm tài liệu này, tôi đã tìm kiếm "BigDecimal Java")
Justin

1
"Tôi có một yêu cầu trong đó chúng ta phải sử dụng Double làm đối số" Thay đổi yêu cầu. Không có ích lợi gì khi sử dụng BigDecimaltrừ khi bạn sử dụng nó từ đầu đến cuối. Yêu cầu này ảnh hưởng đến độ chính xác; có thể ảnh hưởng đến việc tuân thủ quy định; và có thể tạo thành sơ suất có thể kiện.
Marquis of Lorne,

Tại sao bạn đang sử dụng Doublevà không double. Nó là một lĩnh vực có thể được null?
Peter Lawrey

@EJP Sử dụng doublekhông phải là xấu, nhưng vì nó có hơn 15 chữ số về độ chính xác biểu diễn, nhiều hơn mức mà hầu hết các chương trình cần, nhưng tôi đồng ý rằng không có ích gì khi sử dụng BigDecimal vì bạn có nhiều khả năng thêm lỗi / phức tạp.
Peter Lawrey

Câu trả lời:


225

Bạn cần sử dụng doubleValue()phương thức này để lấy giá trị kép từ đối tượng BigDecimal.

BigDecimal bd; // the value you get
double d = bd.doubleValue(); // The double you want

Xin chào, tôi đã sử dụng giống nhau, Nhưng vấn đề là cả hai anser đều khác nhau, đầu ra thập phân của tôi là 13555261857,79 và khi được chuyển đổi thành gấp đôi của nó là 1.355526185779E10 .. Làm cách nào để nhận được cùng một đầu ra sau khi chuyển đổi thập phân thành gấp đôi
user13926345

@ user13926345 - Cả hai đều có cùng giá trị. Chỉ là đầu ra đầu tiên là đại diện bình thường của giá trị và đầu ra kia là đại diện khoa học .
SudoRahul

35

Bạn có thể chuyển đổi BigDecimalsang doublesử dụng .doubleValue(). Nhưng tin tôi đi, đừng sử dụng nó nếu bạn có hành vi thao túng tiền tệ. Nó phải luôn được thực hiện trên BigDecimalcác đối tượng trực tiếp. Mất độ chính xác trong các tính toán này là vấn đề lớn về thời gian trong các tính toán liên quan đến tiền tệ.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.