2010-09-30 62 views

Trả lời

-1
new BigDecimal(myfloat) 
+4

Không có nhà xây dựng nổi, điều này được Automagically đúc đến một đôi, và constructor đôi không an toàn – Alex

-2

Sử dụng float constructor:

float f = 10.0f; 
BigDecimal b = new BigDecimal(f); 
+7

Không có hàm tạo float nào, điều này tự động đúc thành một double, và hàm tạo đôi không an toàn – Alex

35
BigDecimal value = new BigDecimal(Float.toString(123.4f)); 

Từ javadocs, các nhà xây dựng chuỗi thường là cách ưa thích để chuyển đổi một float thành một BigDecimal, vì nó không bị ảnh hưởng từ không thể đoán trước của hàm tạo BigDecimal(double).

Trích dẫn từ các tài liệu:

Lưu ý: Đối với các giá trị float khác và đôi NaN và ± Infinity, constructor này là phù hợp với các giá trị được trả về bởi Float.toString (float) và Double.ToString (double). Đây thường là cách ưu tiên để chuyển đổi một phao hoặc gấp đôi thành một BigDecimal, vì nó không bị khó lường trước của hàm dựng BigDecimal (double).

+4

Nhưng chuyển đổi 'float' thành String một cách rõ ràng không giúp bạn tự động giải quyết được sự không dự đoán được - bạn cần chú ý định dạng đúng giá trị (làm tròn e tc.). – Jesper

8

Đối với một độ chính xác của 3 chữ số sau dấu thập phân:

BigDecimal value = new BigDecimal(f, 
     new MathContext(3, RoundingMode.HALF_EVEN)); 
13
float f = 45.6f; 
BigDecimal bd = BigDecimal.valueOf(f); 

Trích dẫn từ tài liệu:

Lưu ý: Đây thường là cách ưa thích để chuyển đổi một đôi (hoặc phao) vào BigDecimal, khi giá trị trả về bằng do xây dựng một BigDecimal từ kết quả của việc sử dụng Double.toString (double).

tham khảo: BigDecimal (Java Platform SE 6)

+0

'Double.toString (float)' tạo ra một kết quả khác với 'Float.toString (float)'. –

1

Đây là tối đa kiến ​​thức của tôi:

public static BigDecimal floatToBigDecimal(Float a){ 


    if(a == null || a.isInfinite() || a.isNaN()){ 
     return BigDecimal.ZERO; 
    } 
    try{ 
     return BigDecimal.valueOf(a); 

    }catch(Exception e){ 
     return BigDecimal.ZERO; 
    } 

} 

* Lưu ý: Đây thường là cách ưa thích để chuyển đổi một đôi (hoặc nổi) vào một BigDecimal, như giá trị trả về bằng với kết quả từ việc xây dựng một BigDecimal từ kết quả của việc sử dụng Double.toString (double).

public static BigDecimal valueOf (val kép)

thông số:
val - đôi để chuyển đổi sang một BigDecimal.
Trả về:
một BigDecimal có giá trị bằng hoặc xấp xỉ bằng giá trị của val.
Ném:
NumberFormatException - nếu val là vô hạn hoặc NaN.
Từ:
1,5

Tôi đã kiểm tra liệu Infinite hoặc Not a Number, do đó có ít cơ hội NumberFormatException

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