2009-12-01 107 views

Trả lời

15

Nó không phải là thực sự là một chuyển đổi, nhưng về cách bạn hiển thị số. Bạn có thể sử dụng NumberFormat để chỉ định cách hiển thị số.

Kiểm tra sự khác biệt:

double number = 100550000.75; 
NumberFormat formatter = new DecimalFormat("#0.00"); 

System.out.println(number); 
System.out.println(formatter.format(number)); 
+0

u có thể cho tôi biết cách làm tương tự cho các số có dấu thập phân. ví dụ. 1234567812.1212. Ký hiệu mũ sẽ là 1.2345678121212E9. Tôi cần mang nó trở lại 1234567812.1212. Nếu có 4 số sau dấu thập phân, tôi cần phải nhận 4. Nếu 5 số, sau đó 5. – sai

+0

Sai, hãy sử dụng # .########. Bạn có thể thêm # sau dấu tách thập phân để tăng độ chính xác. Nhưng lưu ý rằng độ chính xác tối đa sẽ được xác định bởi loại dữ liệu bạn sử dụng. Ví dụ: nếu bạn sử dụng gấp đôi, bạn sẽ không nhận được hơn 17 chữ số thập phân (chỉ cần kiểm tra xem điều gì xảy ra nếu bạn in 1/3 mà không có trình định dạng). Vì vậy, nếu bạn bao gồm hơn mười bảy # sau dấu tách thập phân, nó sẽ không làm tăng độ chính xác. Nếu bạn cần độ chính xác cao hơn gấp đôi, hãy xem lớp BigDecimal. –

11

Làm thế nào về BigDecimal.valueOf(doubleToFormat).toPlainString()

+0

Điều gì sẽ là sự khác biệt nếu tôi sử dụng toString() thay vì toPlainString()? –

+1

@ShiladittyaChakraborty, câu đầu tiên trong [API cho BigDecimal.toString()] (https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#toString--) tiểu bang rằng ký pháp khoa học sẽ được sử dụng nếu một số mũ là cần thiết. – Paul

0

câu trả lời của @ b.roth là đúng chỉ khi nó là quốc gia cụ thể. Tôi đã sử dụng phương pháp đó và có vấn đề i18n, bởi vì các new DecimalFormat("#0.00) mất seperator thập phân của quốc gia cụ thể. Ví dụ: nếu một quốc gia sử dụng phân tách thập phân là ",", thì giá trị được định dạng sẽ bằng 0,00 (ví dụ: 1,2e2 sẽ là 120,00 ở một số nơi và 120,00) ở một số nơi do vấn đề i18n như đã nói here ..

phương pháp mà tôi thích là `(. mới BigDecimal ("1.2e2") toPlainString())

0

chỉ cần thêm sau thẻ để jspx: -

<f:convertNumber maxFractionDigits="4" minFractionDigits="2" groupingUsed="false"/> 
0
String data = Long.toString((long) 3.42E8); 
System.out.println("**************"+data); 
0

thử sau đây

long l; 
double d; //It holds the double value.such as 1.234E3 
l=Double.valueOf(time_d).longValue(); 

bạn nhận được giá trị thập phân trong biến l.

0

Khi làm việc với Doubles và số Long trong Java, bạn sẽ thấy rằng hầu hết giá trị được hiển thị ở dạng Exponential.

Ví dụ: Theo sau chúng tôi nhân 2.35 với 10000 và kết quả được in.

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + a.doubleValue()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + a.doubleValue()); 

Kết quả:

  1. 2.85E-4
  2. 2.85E8

Vì vậy bạn có thể xem kết quả được in ra dưới dạng mũ. Bây giờ bạn có thể muốn hiển thị kết quả theo định dạng thập phân thuần túy như: 0.000285 hoặc 285000000. Bạn có thể làm điều này đơn giản bằng cách sử dụng lớp java.math.BigDecimal. Trong ví dụ sau, chúng tôi đang sử dụng BigDecimal.valueOf() để chuyển đổi giá trị Double thành BigDecimal và hơn .toPlainString() để chuyển đổi thành chuỗi thập phân đơn giản.

import java.math.BigDecimal; 
//.. 
//.. 

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + BigDecimal.valueOf(a).toPlainString()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + BigDecimal.valueOf(a).toPlainString()); 

Kết quả:

  1. 0.000285

Những bất lợi duy nhất của phương pháp trên là nó tạo ra chuỗi dài các số. Bạn có thể muốn hạn chế giá trị và làm tròn số tới 5 hoặc 6 dấu thập phân. Đối với điều này bạn có thể sử dụng java.text.DecimalFormat lớp. Trong ví dụ sau, chúng tôi làm tròn số đến 4 dấu thập phân và in đầu ra.

import java.text.DecimalFormat; 
//.. 
//.. 

Double a = 2.85d/10000; 
DecimalFormat formatter = new DecimalFormat("0.0000"); 
System.out.println(formatter .format(a)); 

Kết quả:

0,0003

Tôi vừa cố gắng để nén mã này với một dòng, nó sẽ in giá trị của 'a' với hai chữ số thập phân:

new DecimalFormat("0.00").format(BigDecimal.valueOf(a).toPlainString()); 

Chuyển đổi hạnh phúc :)

0

Bạn có thể làm:

BigDecimal 
    .valueOf(value) 
    .setScale(decimalLimit, RoundingMode.HALF_UP) 
    .toPlainString() 
Các vấn đề liên quan