字符串格式C#小负值

时间:2018-08-31 04:39:56

标签: c# string format

为什么下面的程序不输出第二行的负号?

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

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