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

时间:2011-09-09 13:54:10

标签: c++ operator-overloading

我们有一个学校作业,我们被告知所有数字都在结束后结束 第三个十进制数字,意味着0.0009在我们的例子中是0。 我怎么能用c ++做到这一点? 我应该使用运算符重载创建一个新类吗? 感谢

5 个答案:

答案 0 :(得分:3)

您应该能够取数,乘以1000,执行算术运算,然后除以1000.0得到结果。

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

答案 1 :(得分:3)

  

我应该使用运算符重载创建一个新类吗?

这将有助于使使用该类的代码变得简单。由您决定是否要努力获得这种简单性。

  

我怎么能用c ++做到这一点?

在C ++中,有一种方法可以将浮点数截断为零小数位:一个强制转换。

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

你可以用一些数学来截断到三位小数。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

对于打印,我不认为需要新的课程,你可以将它们四舍五入。使用printf(“%。3f”,);

请参阅:Rounding Number to 2 Decimal Places in C

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

答案 4 :(得分:0)

对于一些计算,不要上课 - 它会使代码更难理解(任何时候你做运算符重载你必须考虑到未来的用户因意外行为而犯错误)。话虽如此,你可能能够摆脱一个非常简单的类,它只包含一个to-to-double和一个assign-from-double运算符以及一个构造函数。这是完全可以接受的。

#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 =: - )

这段代码未经测试,但我觉得它看起来不错。