问题是,.NET始终会 在 应用格式 之前 四舍五入
double为15位有效的十进制数字,而不管您的格式要求的精度和二进制数的确切十进制值如何。
__
我猜想Visual Studio调试器有其自己的格式/显示例程,这些例程直接访问内部二进制数,因此C#代码,C代码和调试器之间存在差异。
没有内置的函数可以访问a的确切十进制值
double,也无法
double将a
格式化为特定的小数位数,但是您可以自己完成此工作,方法是将内部二进制数拆开并重建为十进制值的字符串表示形式。
另外,您可以使用Jon
Skeet的
DoubleConverter类(从他的“二进制浮点和.NET”文章链接到)。该
ToExactString方法具有返回a的精确十进制值的方法
double。您可以轻松地对此进行修改,以将输出舍入为特定精度。
double i = 10 * 0.69;Console.WriteLine(DoubleConverter.ToExactString(i));Console.WriteLine(DoubleConverter.ToExactString(6.9 - i));Console.WriteLine(DoubleConverter.ToExactString(6.9));// 6.89999999999999946709294817992486059665679931640625// 0.00000000000000088817841970012523233890533447265625// 6.9000000000000003552713678800500929355621337890625
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)