2012-03-18 65 views
8

Cách nào là cách tốt nhất để so sánh BigDecimal và int trong Java: coverting BigDecimal thành int hoặc chuyển đổi int thành BigDecimal?So sánh BigDecimal và int trong Java

+0

Nếu bạn chuyển đổi BigDecimal thành int, bạn có thể vượt quá phạm vi của nó. –

Trả lời

9

Nếu bạn mong đợi giá trị BigDecimal là thực sự lớn (tức là bên ngoài phạm vi của int giá trị, đó là -2 -2 -1) và/hoặc để chứa chữ số thập phân, hoặc đơn giản là muốn chơi an toàn, bạn nên chuyển đổi int thành BigDecimal để tránh lỗi tràn/cắt ngắn.

Nếu không, nếu hiệu suất là một vấn đề thực sự lớn (hiếm khi xảy ra), thì có thể sẽ tốt hơn theo cách khác.

+1

Thats chính xác những gì tôi muốn biết! Cảm ơn @peter! – HighBit

0

Một lý do không chuyển đổi int thành BigDecimal là thực tế bạn sẽ tạo một đối tượng mới, do đó bạn thực sự đang đổ rác trên heap của mình để thực hiện sự bình đẳng. Ngoài ra, bình đẳng nguyên thủy sẽ nhanh hơn so với đối tượng BigInteger thực tế.

+0

Tại sao điều này sẽ "vứt rác trên đống"? –

+0

nhưng điều này có thể gây ra tràn và kết quả có thể sai. Nếu BigDecimal bd = maxint +1 và bd được chuyển đổi thành int kết quả sẽ là 1 – nist

+0

Chắc chắn, nó phụ thuộc vào trường hợp sử dụng thực tế. @Oli mỗi lần cho trường hợp so sánh, bạn sẽ tạo đối tượng BigInteger mới, có thể không cần thiết và nằm trên heap, thay vì lấy giá trị nguyên thủy thực tế đã được lưu trữ trong chính đối tượng BigInt – Bober02

2

Bạn muốn chuyển đổi int thành BigDecimal.

Điều này là do bạn sẽ không luôn có thể chuyển đổi BigDecimal thành int; bạn sẽ mất mọi thông tin sau dấu thập phân và giá trị của BigDecimal có thể nằm ngoài phạm vi của một int.

1

Như BigDecimal mở rộng phạm vi của int bạn sẽ phải chuyển đổi các int vào BigDecimal để đảm bảo họ có thể được so sánh, dù sao đi nữa.