如何将双3.14567视为3.14(即具有给定精度)

时间:2010-09-20 10:48:49

标签: c++

我想知道在c ++中是否有任何方式来处理具有给定精度的double。 例如,数字3.1345将被视为3.13,数字0.009将被视为0(点后的精度为2)。

我需要将它应用于数学运算。例如:

double a = 0.009;
double b = 3.12345

//a should be considered as 0, b as 3.12

double c = a*b // should output 0.
double d = a+b // should output 3.12

因为函数setprecision()用于std我想知道是否还有其他功能可以做到这一点。

谢谢

4 个答案:

答案 0 :(得分:6)

永远无法与双打合作。双精度是二进制分数,它们不具有小数或小数精度。请阅读The Floating-Point Guide了解详情。

如果您需要特定的十进制行为,则必须删除双精度数并使用十进制数据类型。你可能会发现看起来有效的基于双重的解决方案,但是你总会碰到它不会的情况。

答案 1 :(得分:0)

double a = 3.12345; double b =((int)a * 100)/ 100.0;

答案 2 :(得分:0)

最简单的方法:

int a100 = int(a*100);
int b100 = int(b*100);
int c100 = a100 * b100; // Will be 0
int d100 = a100 + b100; // Will be 312

答案 3 :(得分:0)

看看floor()和ceil()

http://www.cplusplus.com/reference/clibrary/cmath/floor/

α=地板(a)的 B =地板(B * 100)/ 100;