繁体   English   中英

以2位精度存储双精度

[英]Storing a double with 2 digit precision

如何将双精度转换为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.099999999999999之间存在显着差异)那么您应该使用数据类型它基于整数语义 - 使用缩放整数的定点表示或类似.NET decimal类型的定义。

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

此代码生成1.00

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

decimal数据类型具有可变精度的概念。 双数据类型没有。 它的精度始终为53位。

double的默认字符串表示形式略微0.999999999999以最小化奇怪的值,如0.999999999999 ,然后删除任何尾随零。 正如其他答案所述,您可以使用类型的ToString重载之一来更改该行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM