Từ các tài liệu nó sau đó các hình thức nhỏ gọn nhất để đại diện cho số sẽ được chọn.
I.e, khi bạn không chỉ định chuỗi định dạng, default is the "G" format string. Từ số specification of the G format string theo sau:
Kết quả: Nhỏ gọn nhất của điểm cố định hoặc ký hiệu khoa học.
default for the number of digits là 15 với trình chỉ định. Điều đó có nghĩa là một số có thể biểu diễn là chính xác một biểu diễn nhị phân nhất định (như 0,1 trong ví dụ về harriyott) sẽ được hiển thị dưới dạng điểm cố định, trừ khi ký hiệu lũy thừa nhỏ gọn hơn.
Khi có nhiều chữ số hơn, theo mặc định, nó sẽ hiển thị tất cả các chữ số này (tối đa 15) và chọn ký hiệu số mũ một khi ngắn hơn.
Đưa này với nhau:
?(1.0/7.0).ToString()
"0,142857142857143" // 15 digits
?(10000000000.0/7.0).ToString()
"1428571428,57143" // 15 significant digits, E-notation not shorter
?(100000000000000000.0/7.0).ToString()
"1,42857142857143E+16" // 15 sign. digits, above range for non-E-notation (15)
?(0.001/7.0).ToString()
"0,000142857142857143" // non E-notation is shorter
?(0.0001/7.0).ToString()
"1,42857142857143E-05" // E-notation shorter
Và, quan tâm:
?(1.0/2.0).ToString()
"0,5" // exact representation
?(1.0/5.0).ToString()
"0,2" // rounded, zeroes removed
?(1.0/2.0).ToString("G20")
"0,5" // exact representation
?(1.0/5.0).ToString("G20")
"0,20000000000000001" // unrounded
này là để hiển thị những gì xảy ra đằng sau những cảnh và lý do tại sao 0.2
được viết như 0.2
, không 0,20000000000000001
, mà thực sự là Là. Theo mặc định, 15 chữ số có nghĩa được hiển thị. Khi có nhiều chữ số hơn (và luôn có, ngoại trừ một số đặc biệt nhất định), chúng được làm tròn theo cách thông thường. Sau khi làm tròn, các số 0 thừa sẽ bị xóa.
Lưu ý rằng đôi có độ chính xác 15 hoặc 16 chữ số, tùy thuộc vào số. Vì vậy, bằng cách hiển thị 15 chữ số, những gì bạn thấy là một số được làm tròn chính xác và luôn là một biểu diễn hoàn chỉnh và biểu diễn ngắn nhất của đôi.
Bạn trả lời không bao gồm thông số chính xác, đó là một phần lý do tại sao nó được hiển thị theo cách của nó. Giá trị mặc định là '15'. Ngoài ra, nó không phải lúc nào cũng là ký hiệu nhỏ gọn nhất. '0,0001' lớn hơn' 1E-04', nhưng đầu tiên là đầu ra. Các tài liệu MS không hoàn thành ở đây. – Abel
@Abel: Sẽ bao gồm cả hai bit, cảm ơn. –
Tôi không đồng ý với thuật ngữ "nhỏ gọn nhất" và xem xét tài liệu msdn là gây hiểu nhầm về mặt này. Nếu bạn mất double x = 13950, sau đó định dạng G4 sản xuất "1.395E + 04", mà là dặm từ là "nhỏ gọn nhất". Theo tôi, định dạng "G" hoạt động tốt hơn trong C, Fortran, vv, nơi nó thực sự tạo ra chuỗi "nhỏ gọn nhất". C# buộc tôi phải tìm cách giải quyết ... –