2013-04-05 34 views
19

Tôi muốn chuyển đổi BigDecimal thành String cho mục đích in nhưng in ra tất cả các chữ số mà không cần ký hiệu khoa học. Ví dụ:Định dạng BigDecimal mà không có ký hiệu khoa học với precission đầy đủ

BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); 
String out = d.toString(); // Or perform any formatting that needs to be done 
System.out.println(out); 

Tôi muốn nhận 12334535345456700.12345634534534578901 được in. Ngay bây giờ tôi nhận được: 1.23345353454567E + 16.

+0

'System.out.println (ra); 'không' System.out.println (đầu ra);' –

+1

Một phần của vấn đề là '12334535345456700.12345634534534578901' bị cắt bớt thành' 1.23345353454567E + 16' ngay cả trước khi giá trị được chuyển vào hàm tạo 'BigDecimal', vì các giá trị kép không đổi trong mã của bạn không có độ chính xác cao như vậy. Bạn có thể xác minh điều này bằng cách đơn giản cố gắng lưu trữ nó trong biến 'double' thay vào đó và in ra: http://ideone.com/j5FKp1. Bạn cần bắt đầu với giá trị dưới dạng chuỗi nếu bạn muốn có độ chính xác cao hơn. – mellamokb

Trả lời

28

Để duy trì độ chính xác cho một BigDecimal bạn cần phải vượt qua giá trị như là một String

BigDecimal d = new BigDecimal("12334535345456700.12345634534534578901"); 
System.out.println(d.toPlainString()); 
+0

Nó sẽ chỉ in 12334535345456700 –

+0

In '12334535345456700.12345634534534578901' cho tôi :) – Reimeus

+0

In tốt cho tôi. Bạn đang sử dụng 'BigInteger' bởi cơ hội nào? – christopher

1

Bạn muốn sử dụng một DecimalFormat:

DecimalFormat df = new DecimalFormat("#.#"); 
String output = df .format(myBD); 
System.out.println(value + " " + output); 
11

Lớp BigDecimal có một phương pháp toPlainString. Gọi phương thức này thay vì tiêu chuẩn toString và nó sẽ in ra số đầy đủ mà không cần ký hiệu khoa học.

Ví dụ

BigDecimal b = new BigDecimal("4930592405923095023950238502395.3259023950235902"); 
System.out.println(b.toPlainString()); 

Output: 4930592405923095023950238502395.3259023950235902 
1

Bạn có thể sử dụng này

BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); 
String out= d.toPlainString(); 
System.out.println(out); 
+2

-1 Vấn đề ở độ chính xác của số gốc được chuyển thành gấp đôi. Bạn ít nhất có thể làm việc thẩm định của bạn và kiểm tra điều này với ideone, mất khoảng 30 giây: http://ideone.com/n137Cs – mellamokb

+0

làm thế nào bạn chấp nhận BigDecimal mới (giá trị String); từ Reimeus có thể hoạt động? tôi đoán BigDecimal.valueOf không chấp nhận Strings trong constructor? Phải không? –

+0

Phải, tôi tin 'valueOf' chỉ dành cho các giá trị số. Bạn sẽ cần sử dụng hàm tạo để truyền giá trị chuỗi. – mellamokb

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