只使用前3位小数计算,如何??(c++)

Calculating using only the first 3 decimal digits, how?? (c++)

本文关键字:如何 c++ 计算 3位 小数      更新时间:2023-10-16

我们有一个学校作业,我们被告知所有的数字结束于第三位小数,在我们的例子中意味着0.0009是0。我如何在c++中做到这一点?我应该使用操作符重载创建一个新类吗?由于

我应该用操作符重载创建一个新类吗?

这将有助于使使用该类的代码变得简单。是否要努力获得那种简单取决于你自己。

我如何在c++中做到这一点?

在c++中有一种将浮点数截断为小数点后0位的方法:强制类型转换。

double d1 = 1.34;
double d2 = (int)i; // now d2 is 1

您可以使用它与一些数学截断到小数点后三位

你应该能够把你的数字,乘以1000,进行你的算术运算,然后除以1000.0得到你的结果。

((int)(0.0009 * 1000))/1000.0 == 0.0

您可以选择使用整数。取0.0009 * 1000 = 0.9,只使用整数部分,低于0。最后你可以选择将你的最终答案除以1000?

对于打印,我认为不需要新的类,您可以四舍五入。使用printf(" %。

3 f");

参见:C中四舍五入到小数点后两位

用于计算,参见:http://www.daniweb.com/software-development/cpp/threads/184830

对于一些计算,不要创建类——这将使代码更难理解(任何时候进行操作符重载时,都必须考虑到未来用户由于意外行为而导致的错误)。话虽如此,您可以使用一个非常简单的类,它只包含一个双精度类型的强制转换操作符和一个双精度类型的赋值操作符以及一个构造函数。这是完全可以接受的。

#include <cmath>
class Threep
{
   double val;
public:
   Threep(double x) : val(floor(x*1000)/1000) {}
   operator double() { return val; }
   double operator=(double rhs) { val = floor(rhs*1000)/1000; return val;}
   double operator*=(double rhs) { val = floor((val*rhs)*1000)/1000; return val;}
   double operator/=(double rhs) { val = floor((val/rhs)*1000)/1000; return val;}
   double operator+=(double rhs) { val = floor((val+rhs)*1000)/1000; return val;}
   double operator-=(double rhs) { val = floor((val-rhs)*1000)/1000; return val;}
};

我添加了一些方便的赋值以及operator=:-)

这段代码是未经测试的,但它看起来很好,我的眼睛