2010-03-10 20 views
5

Tôi chỉ đang cân nhắc xem có thể tạo loại dữ liệu của riêng mình hay không? Vì vậy, nếu bạn cần độ chính xác cao hơn, điều đó không được hỗ trợ bởi một trong các loại cơ bản, bạn chỉ có thể "tạo" toàn bộ các yêu cầu của mình.Java: Làm kiểu dữ liệu của riêng mình? (ví dụ: dài gấp đôi?)

Điều đó có thể thực hiện được không?

+3

Tôi khuyên bạn nên đọc về lập trình hướng đối tượng. Bạn có thể sử dụng các lớp để xác định các kiểu dữ liệu của riêng bạn. – Jonathan

+3

Một lớp java do người dùng định nghĩa cũng là một kiểu! Chỉ cần thêm một số thành viên của các loại dài, dài để giữ toàn bộ và phân đoạn các phần của một số. Thêm các phương thức để cộng/trừ và bạn sẽ đi! – Elister

+0

@Andreas Hornig cảm thấy tự do chấp nhận câu trả lời trả lời câu hỏi của bạn. – Bozho

Trả lời

16

Hãy xem BigDecimal

Bất biến, tùy tiện có độ chính xác đã ký số thập phân

Và để trả lời câu hỏi của bạn - có, bạn có thể thùng kiểu dữ liệu, nhưng họ không thể là nguyên thủy các loại (như int, double, v.v ...). Họ phải là các lớp học, giống như trường hợp với BigDecimal (và BigInteger)

Và một lời khuyên khác để sử dụng các lớp học Big* - như được viết, chúng không thay đổi. Điều này có nghĩa là việc gọi add(..) không thay đổi đối tượng - nó trả về một đối tượng mới phản ánh thay đổi. I E.

BigDecimal dec = BigDecimal.ZERO; 
dec.add(new BigDecimal(5)); // nothing happens 
dec = dec.add(new BigDecimal(5)); // this works 
8

Bạn không thể tạo các loại giá trị tùy chỉnh của riêng bạn trong Java, nếu đó là những gì bạn đang yêu cầu. Dĩ nhiên, bạn có thể tự tạo các tham chiếu riêng của mình - sau tất cả mọi thứ trong Java.

Nhưng như những người khác đã nói, BigDecimal (và BigInteger) nên là điểm bắt đầu của bạn cho các loại số có độ chính xác cao hơn.

1

Mọi thứ luôn có thể.

Điều đó không có nghĩa là ai đó chưa từng làm điều đó trước đó và hiệu quả hơn bao giờ hết.

BigInteger và BigDecimal là những gì bạn đang tìm kiếm.

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