Tôi vừa xem qua "tính năng" tuyệt vời mà .NET sẽ theo mặc định làm Double.ToString()
sử dụng ký pháp khoa học nếu có đủ chữ số thập phân.Double ToString - Không có ký pháp khoa học
.005.ToString() // ".005"
.00005.ToString() // "5E-05"
Có ai biết cách hiệu quả để làm cho chuỗi này xuất hiện dưới dạng chuỗi ký hiệu chuẩn (phi khoa học) không?
Tôi đã xem this question, nhưng hai câu trả lời hàng đầu có vẻ như là loại hacky với tôi vì cả hai đều làm Double.ToString()
và sau đó chỉ định dạng lại kết quả.
Cảm ơn bạn đã được trợ giúp.
EDIT:
Kết quả mong muốn:
.00005.ToString() == ".00005"
EDIT2:
là gì với tất cả các bản sao và phiếu gần? Tôi đặc biệt nói trong câu hỏi rằng câu hỏi tương tự không có câu trả lời thỏa đáng. Mọi người trên trang web này nhận được cách quá sức mạnh hạnh phúc.
GIẢI PHÁP CỦA TÔI:
Trong trường hợp đó là hữu ích cho bất cứ ai:
/// <summary>
/// Converts the double to a standard notation string.
/// </summary>
/// <param name="d">The double to convert.</param>
/// <returns>The double as a standard notation string.</returns>
public static String ToStandardNotationString(this double d)
{
//Keeps precision of double up to is maximum
return d.ToString(".#####################################################################################################################################################################################################################################################################################################################################");
}
Chú ý: Đây chỉ làm việc cho các giá trị> 1. Tôi đã không tìm thấy một cách hiệu quả để làm điều này cho tất cả các giá trị chưa .
Bạn nhận ra rằng, ở dưới kim loại của máy tính, các số dấu phẩy động được lưu trữ với số lượng ký hiệu khoa học cơ bản-2. Đây không phải là một "tính năng" châm biếm; hành vi là không thể thiếu đối với loại. Trong khi nó có thể hiển thị nổi trong định dạng thập phân hoàn toàn (tôi hỗ trợ câu trả lời của Tim S về điều này), một số như 2.68E201 sẽ chỉ đơn giản là có * lot * của số không. – KeithS
@KeithS ToString() phải có hành vi nhất quán, bất kể phần cứng. Đó là toàn bộ điểm trừu tượng mà tất cả các chương trình hiện đại đều dựa vào. Người ta hy vọng rằng để có được một cái gì đó trong ký hiệu khoa học, người ta sẽ xác định điều đó. – MgSam
Tôi không thể trả lời được nữa, nhưng bạn có thể truyền 'double' thành' decimal' và sau đó thực hiện 'ToString()'. Tôi đã không thực hiện kiểm tra hiệu năng nhanh hơn, 'thập phân' hoặc chuỗi định dạng có hơn 300 ký tự. – ygoe