我有以下问题:
double a = 6.005; double b = 5.995;
例如,我想在点后设置双精度 2 位数
double c = a+b;// I would like to get 11.99 not 12.00
.
我怎样才能做到这一点?
我有以下问题:
double a = 6.005; double b = 5.995;
例如,我想在点后设置双精度 2 位数
double c = a+b;// I would like to get 11.99 not 12.00
.
我怎样才能做到这一点?
精度是一回事;四舍五入的展示是另一回事。
我认为这是错误的方向。您应该希望获得所有可以得到的精度,并担心在结果完成时四舍五入以进行显示。
更新:
您不应该使用双精度来表示货币。上次我看的时候,C++ 是一种面向对象的语言。您应该为 Money 创建一个抽象,它做正确的事情并将这些细节从类的客户中抽象出来。
如果您使用美元工作,您可以创建一个 Money 类来管理以美分表示的货币的私有表示。使用整数进行所有计算并在最后渲染。
我想在点后设置双精度 2 位数
只需乘以 100 并使用整数即可。
您可能应该使用定点数:
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; }
不,您要么需要一一调整所有值(mul 乘以 100,参与 int 部分,div 乘以 100),或者您需要编写自己的 MySpecialDouble 类(在幕后做同样的事情)。