[英]String Format C# Small Negative Values
為什么以下程序不輸出第二行的負號?
var smallpos = 3.65433E-005;
var smallneg = -3.65433E-005;
Console.WriteLine("{0} in F4 format with a width of 8 characters {1}",
smallpos,
smallpos.ToString("F4").PadLeft(8).Substring(0, 8));
Console.WriteLine("{0} in F4 format with a width of 8 characters {1}",
smallneg,
smallneg.ToString("F4").PadLeft(8).Substring(0, 8));
使用VS 2017 Professional 15.8.2 C#7.2
-3.65433E-005
表示-0.0000365433
。
這里的問題在於smallneg.ToString("F4")
。 它僅考慮小數點后的前4位。 因為它們全為0,所以省略了負號,因為-0沒有多大意義。
一旦從背面消除了足夠的數字,其余數字的值將為零,此時,“ -
”的存在沒有任何實際意義。
通過運行下面的代碼片段,可以很直觀地理解這一點,該代碼片段為定點指定符提供的數量減少了。
在最后一行中,省略該說明符,此時NumberFormatInfo.NumberDecimal決定使用的小數位數(取決於所使用的區域性):
var smallneg = -3.65433E-005;
Console.WriteLine(smallneg.ToString("F10")); // -0,0000365433
Console.WriteLine(smallneg.ToString("F9")); // -0,000036543
Console.WriteLine(smallneg.ToString("F8")); // -0,00003654
Console.WriteLine(smallneg.ToString("F7")); // -0,0000365
Console.WriteLine(smallneg.ToString("F6")); // -0,000037
Console.WriteLine(smallneg.ToString("F5")); // -0,00004
Console.WriteLine(smallneg.ToString("F4")); // 0,0000 <-- Zero --> (-0) == 0
Console.WriteLine(smallneg.ToString("F")); // 0,00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.