我想知道在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我想知道是否还有其他功能可以做到这一点。
谢谢
答案 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;