存储精度为2位数的双精度



如何将双精度转换为2位?

例如:

    double x = 1.00d;           
    Console.WriteLine(Math.Round(x,2,MidpointRounding.AwayFromZero));
//Should output 1.00 for me, but it outputs just 1.

我想要的是将1.00存储在一个双变量中,当打印到控制台时会打印1.00。

谢谢,-Mike

"x"存储数字-它不注意精度。

要将数字输出为具有特定精度的字符串,请使用格式说明符,即:

Console.WriteLine(x.ToString("F2"));

double是IEEE-754双精度浮点数。它总是有精确的53位精度。它的精度不能精确地用"小数位数"表示——正如短语所暗示的,"小数位数"只测量相对于10进制的精度。

如果您只想更改显示的精度,那么您可以使用其中一个ToString()重载来执行此操作,正如这里的其他答案所指出的那样。

还要记住,double连续实值的近似值;即不存在隐含离散量化的值(尽管这些值实际上被量化为53比特)。如果您试图表示的是离散值,如果存在隐式量化(例如,如果您使用的是货币值,其中0.1和0.09999999999之间存在显著差异),那么您可能应该使用基于整数语义的数据类型——使用缩放整数的定点表示或类似于.NET decimal类型的数据类型。

这不是存储的问题,而是格式化问题。

此代码生成1.00:

double x = 1.00d;
Console.WriteLine("{0:0.00}", Math.Round(x, 2, MidpointRounding.AwayFromZero));

decimal数据类型具有可变精度的概念。双重数据类型没有。它的精度总是53位。

双精度的默认字符串表示将其稍微四舍五入,以最小化像0.999999999999这样的奇数值,然后删除任何尾随的零。正如其他答案所指出的,您可以通过使用类型的ToString重载之一来更改该行为。

最新更新