只使用前3位小数计算,如何??(c++)
Calculating using only the first 3 decimal digits, how?? (c++)
我们有一个学校作业,我们被告知所有的数字结束于第三位小数,在我们的例子中意味着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=:-)
这段代码是未经测试的,但它看起来很好,我的眼睛
相关文章:
- 如何循环打印顶点结构
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何将stdout重定向到stderr
- Mongodb c++驱动程序:如何查询元素的数组
- 当回溯以零开始时,如何调试崩溃
- 如何反转整数参数包
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 如何从C++中的依赖类型中获得它所依赖的类型
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何使用ndk-build.cmd构建Android.so文件
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- 循环后如何继续阅读
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何使用向量的template_back函数