如何将双精度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
模板来改进。