簡體   English   中英

字符串格式C#小負值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM