Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将双精度3.14567视为3.14(即具有给定感知) 我想知道C++中有没有方法可以处理给定精度的加倍。 例如,数字3.1345将被视为3.13,数字0.009将被视为0(点后精度为2)_C++ - Fatal编程技术网

如何将双精度3.14567视为3.14(即具有给定感知) 我想知道C++中有没有方法可以处理给定精度的加倍。 例如,数字3.1345将被视为3.13,数字0.009将被视为0(点后精度为2)

如何将双精度3.14567视为3.14(即具有给定感知) 我想知道C++中有没有方法可以处理给定精度的加倍。 例如,数字3.1345将被视为3.13,数字0.009将被视为0(点后精度为2),c++,C++,我需要把它应用到数学运算中。例如: 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的,我想知道是否还有其他函数可以这样做 谢谢这对双打来说永远不会正确。双精度是二进制分数,它们没有小数或小数精

我需要把它应用到数学运算中。例如:

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的,我想知道是否还有其他函数可以这样做


谢谢

这对双打来说永远不会正确。双精度是二进制分数,它们没有小数或小数精度。详情请阅读


如果需要特定的十进制行为,则必须删除double并使用decimal数据类型。你可能会发现基于双工的解决方案似乎是可行的,但你总是会遇到不可行的情况。

这在使用双工时永远都不会正常工作。双精度是二进制分数,它们没有小数或小数精度。详情请阅读

如果需要特定的十进制行为,则必须删除double并使用decimal数据类型。你可能会发现双基解决方案似乎是可行的,但你总是会遇到一些不可行的情况。

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

双a=3.12345; 双b=((int)a*100)/100.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
最简单的方法:

int a100 = int(a*100);
int b100 = int(b*100);
int c100 = a100 * b100; // Will be 0
int d100 = a100 + b100; // Will be 312
看看地板()和天花板()

a=楼层(a); b=地板(b*100)/100

看看地板()和天花板()

a=楼层(a);
b=地板(b*100)/100

如果“((int)a*100)/100.0”不能完美地表示为双精度?这并不总是有效的,但我是在把这个打成“最接近”的解决方案。您应该提到这个缺陷。如果“((int)a*100)/100.0”不能完美地表示为双精度?这并不总是有效的,但我是在把这个打成“最接近”的解决方案。您应该提到该缺陷。尽管如此,内部表示与格式化输出是完全不同的主题。一个数字可能有100个十进制分辨率,但只能打印2个。大多数程序员喜欢有更好的内部分辨率。FWIW,内部表示与格式化输出是完全不同的主题。一个数字可能有100个十进制分辨率,但只能打印2个。大多数程序员喜欢有更好的内部分辨率。当然,这可以通过使用适当的
iostream
重载定义
decimal
模板来改进。当然,这可以通过使用适当的
iostream
重载定义
decimal
模板来改进。