1

我有以下问题:

double a = 6.005; double b = 5.995;

例如,我想在点后设置双精度 2 位数

double c = a+b;// I would like to get 11.99 not 12.00.

我怎样才能做到这一点?

4

4 回答 4

12

精度是一回事;四舍五入的展示是另一回事。

我认为这是错误的方向。您应该希望获得所有可以得到的精度,并担心在结果完成时四舍五入以进行显示。

更新:

您不应该使用双精度来表示货币。上次我看的时候,C++ 是一种面向对象的语言。您应该为 Money 创建一个抽象,它做正确的事情并将这些细节从类的客户中抽象出来。

如果您使用美元工作,您可以创建一个 Money 类来管理以美分表示的货币的私有表示。使用整数进行所有计算并在最后渲染。

于 2011-07-29T14:57:59.390 回答
10

我想在点后设置双精度 2 位数

只需乘以 100 并使用整数即可。

于 2011-07-29T14:56:38.550 回答
4

您可能应该使用定点数

unsigned int a = 600;
unsigned int b = 599;

unsigned int c = a + b;

unsigned int make_fixed(double d) { return d * 100; }

void print_fixed(unsigned int n) { std::cout << n/100 << "." << n%100; }
于 2011-07-29T14:58:11.403 回答
1

不,您要么需要一一调整所有值(mul 乘以 100,参与 int 部分,div 乘以 100),或者您需要编写自己的 MySpecialDouble 类(在幕后做同样的事情)。

于 2011-07-29T15:08:12.997 回答