为什么下面的程序不输出第二行的负号?
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
答案 0 :(得分:3)
-3.65433E-005
代表-0.0000365433
。
这里的问题是smallneg.ToString("F4")
。它仅考虑小数点后的前4位。因为它们都是0,所以省略了负号,因为-0没什么意义。
答案 1 :(得分:1)
一旦您从背面消除了足够的数字,剩余的数字将为零,此时,“ -
”的存在并不具有实际意义。
通过运行下面的代码片段,可以很直观地理解这一点,该代码片段为fixed-point specifier提供的数量减少了。
在最后一行中,省略该说明符,此时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