C ++双精度和四舍五入

时间:2011-07-29 14:54:42

标签: c++ double rounding double-precision

我有以下问题:

double a = 6.005; double b = 5.995;

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

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

我该怎么做?

4 个答案:

答案 0 :(得分:11)

精确是一回事;圆形显示是另一回事。

我认为这是错误的。您应该想要获得所有精度,并在结果完成时担心舍入以便显示。

更新:

您不应该使用双打代表货币。上次我看,C ++是一种面向对象的语言。您应该为Money创建一个做正确事物的抽象,并从班级客户那里抽象出这些细节。

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

答案 1 :(得分:9)

  

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

只需乘以100然后使用整数。

答案 2 :(得分:3)

您应该使用定点数字:

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; }

答案 3 :(得分:1)

不,您需要逐个调整所有值(mul乘以100,取int部分,div乘以100),或者您需要编写自己的MySpecialDouble类(在场景后面执行相同操作)。