我该如何输出精度足以显示Debug和Release之间算术差异的值?

4
在我的程序中,这段代码片段为:
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))
);

在调试模式下,会输出以下内容:
a= 0.3921569000 b= 0.3921569000 a<b= False

但在发布模式下会得到不同的结果:
a= 0.3921569000 b= 0.3921569000 a<b= True

在我寻找两种模式之间获得一致算术的方法之前,有什么代码可以显示变量中隐藏的精度,这些变量可能导致此差异?谢谢。

1个回答

2

有一个与您所需内容完全相关的标准数值格式字符串: "r"(表示"round-trip")。它会给您一个字符串,其中包含足够多的数字以确保当您再次解析它时,将精确地复制您开始使用的相同位。

因此,不要使用{0:F10},而应使用{0:r},这样您就可以获得所有可用的精度。


太好了!非常感谢Joe。"R"确实揭示了F10中"000"的精度位置。你能解释一下为什么F10给出了一个表面上错误的结果吗? - ChrisJJ
假设您正在使用“double”,实际上可用的精度为15到16位数字。使用“f10”,您明确告诉它向您显示十个小数位。对于介于0.1和0.9之间的数字,这意味着只显示10位数字精度。 - Joe White
Joe,那个例子使用的是float而不是double。我所问的错误结果是F10的0.3921569000,与R的0.392156869相比。我说它是错误的,因为F10足以显示R所显示的所有数字,但F10的输出舍入了两个数字。 - ChrisJJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接