Tôi đã có một giải pháp khác liên quan đến toDainString () của BigDecimal, nhưng lần này sử dụng hàm tạo chuỗi, được khuyến nghị trong javadoc:
hàm tạo này tương thích với các giá trị được trả về bởi Float.toString và Double.toString. Đây thường là cách ưa thích để chuyển đổi float hoặc double thành BigDecimal, vì nó không bị ảnh hưởng bởi tính không thể đoán trước của hàm tạo BigDecimal (double).
Nó trông như thế này ở dạng ngắn nhất của nó:
return new BigDecimal(myDouble.toString()).stripTrailingZeros().toPlainString();
Trước Java 8, kết quả này là "0,0" cho bất kỳ Nhân đôi có giá trị 0 nào, vì vậy bạn sẽ cần thêm:
if (myDouble.doubleValue() == 0)
return "0";
NaN và giá trị vô hạn phải được kiểm tra thêm.
Kết quả cuối cùng của tất cả những cân nhắc này:
public static String doubleToString(Double d) {
if (d == null)
return null;
if (d.isNaN() || d.isInfinite())
return d.toString();
// Pre Java 8, a value of 0 would yield "0.0" below
if (d.doubleValue() == 0)
return "0";
return new BigDecimal(d.toString()).stripTrailingZeros().toPlainString();
}
Điều này cũng có thể được sao chép / dán để hoạt động độc đáo với Float.
dexp: 12345681.000000
đó là giá trị sai. Và thực sự sau đó tôi muốn hiển thị nó trên trang web của mình nơi nó hiển thị như thế này1.2345678E7
. Dù sao tôi cũng có thể lưu trữ nó theo bất kỳ cách nào12345678
và bất kỳ cách nào khác?