Nim*_*rod 2 c# string floating-point
也许我错过了一些东西,但float.ToString()方法围绕数字,这让我很头疼.
看看下面的小代码:当输入12345678作为输入时,调试器中的浮点数是正确的但ToString方法的输出是12345680(我试过的任何格式......)
Console.WriteLine("Please enter a float number");
float theFloat = float.Parse(Console.ReadLine());
Console.WriteLine(string.Format("You have entered {0}", theFloat.ToString("F")));
Run Code Online (Sandbox Code Playgroud)
并输出:
Please enter a float number
12345678
You have entered 12345680.00
Run Code Online (Sandbox Code Playgroud)
将非常感谢帮助!
Mat*_*son 11
您的12345678数字长度超过8位数,因此默认情况下将其四舍五入为7位有效数字,从而产生12345680.(默认注意.)
然而,尽管微软的文章说明浮点数的精度,但实际上它可以保持9位数的精度.
状态的Microsoft文档Single.ToString():
默认情况下,返回值仅包含7位精度,但内部最多保留9位数.
然后继续说:
如果您需要更高的精度,请指定格式为"G9"格式规范,它始终返回9位精度,或"R",如果数字可以用该精度表示,则返回7位数,如果数字只能表示9位数,则返回9位数以最大精度表示.
有了这些信息,我们可以编写这段代码:
Console.WriteLine(12345678f.ToString("G9"));
Run Code Online (Sandbox Code Playgroud)
哪个打印确实12345678.
我无法解释的是为什么微软声称一个浮点数具有7位数的精度,然后继续让我们使用9位数......
但请注意,并非所有8(或9)个十进制数字整数都在float中具有精确表示,如下面的代码所示(最后一位数字不同):
Console.WriteLine(16777217f.ToString("R")); // Prints 16777216
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3175 次 |
| 最近记录: |