C# 我如何输出足够精确的值来揭示调试和发布之间的算术差异?
在我的程序中,这个片段:C# 我如何输出足够精确的值来揭示调试和发布之间的算术差异?,c#,.net,visual-studio-2010,c#-4.0,floating-point,C#,.net,Visual Studio 2010,C# 4.0,Floating Point,在我的程序中,这个片段: trace.Log( String.Format("a= {0:F10} b= {1:F10} a<b= {2}", b.GetPixel(447, 517).GetBrightness(), (100F / 255F), b.GetPixel(447, 517).GetBrightness() < (100F / 255F)) ); trace.Log( String.Format(“a={0:F10}b={1:F10}a这里有一个用于精确查
trace.Log(
String.Format("a= {0:F10} b= {1:F10} a<b= {2}",
b.GetPixel(447, 517).GetBrightness(), (100F / 255F),
b.GetPixel(447, 517).GetBrightness() < (100F / 255F))
);
trace.Log(
String.Format(“a={0:F10}b={1:F10}a这里有一个用于精确查找的字符串:“r”
(用于“往返”)。它为您提供了一个具有足够数字的字符串,以保证在再次解析它时,它将精确地再现您开始使用的相同位
因此,不要使用{0:F10}
,而是使用{0:r}
,您将获得所有可用的精度。仅此一票!非常感谢乔。“r”确实显示了“000”位置的精度"您能解释一下为什么F10给出了一个明显错误的结果吗?假设您使用的是double
,实际可用的精度在15到16位之间。使用F10
,您特别告诉它显示10位小数位。对于0.1到0.9之间的数字,这转换为只显示10位精度的数字。乔,那个例子使用浮点而不是双精度。我问的错误结果是F10的0.3921569000,而R的是0.392156869。我说错误是因为F10对R显示的所有数字都足够了,但F10的输出减少了两位数。
a= 0.3921569000 b= 0.3921569000 a<b= False
a= 0.3921569000 b= 0.3921569000 a<b= True