相关疑难解决方法(0)

格式化C#中输出的双精度数

在.NET中运行与双倍乘法相关的快速实验并阅读了几篇关于C#字符串格式的文章,我认为这样:

{
    double i = 10 * 0.69;
    Console.WriteLine(i);
    Console.WriteLine(String.Format("  {0:F20}", i));
    Console.WriteLine(String.Format("+ {0:F20}", 6.9 - i));
    Console.WriteLine(String.Format("= {0:F20}", 6.9));
}
Run Code Online (Sandbox Code Playgroud)

将是这个C代码的C#等价物:

{
    double i = 10 * 0.69;

    printf ( "%f\n", i );
    printf ( "  %.20f\n", i );
    printf ( "+ %.20f\n", 6.9 - i );
    printf ( "= %.20f\n", 6.9 );
}
Run Code Online (Sandbox Code Playgroud)

但是C#会产生输出:

6.9
  6.90000000000000000000
+ 0.00000000000000088818
= 6.90000000000000000000
Run Code Online (Sandbox Code Playgroud)

尽管我在调试器中显示的值等于6.89999999999999946709(而不是6.9).

与C比较,显示格式要求的精度:

6.900000                          
  6.89999999999999946709          
+ 0.00000000000000088818          
= 6.90000000000000035527          
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

(Microsoft .NET Framework版本3.51 SP1/Visual …

c# floating-point formatting ieee-754

62
推荐指数
5
解决办法
11万
查看次数

计算最后一个位置(ULP)的单位为双打

.NET是否有内置方法来计算给定double或float 的ULP

如果没有,最有效的方法是什么?

.net c# floating-point double

8
推荐指数
2
解决办法
2756
查看次数

标签 统计

c# ×2

floating-point ×2

.net ×1

double ×1

formatting ×1

ieee-754 ×1